新建信息


布局:自动出来的是系统的组件,里面是listview,写ontextchanglis也行
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:padding="5dp"
  5. android:orientation="vertical" >
  6. 。。。。。
  7. <!-- android:completionThreshold="1" 当弹出建议框的时候,actv中输入的字符的个数 -->
  8. <AutoCompleteTextView
  9. android:layout_width="0dp"
  10. android:layout_weight="2"
  11. android:layout_height="wrap_content"
  12. android:id="@+id/actv"
  13. android:textColor="@android:color/black"
  14. android:completionThreshold="1"
  15. android:background="@drawable/et_common_bg"
  16. />
  17. <ImageView
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:background="@drawable/select_contact_bg"
  21. android:id="@+id/iv_select_contact"
  22. />
  23. </LinearLayout>
  24. <EditText
  25. android:layout_width="match_parent"
  26. android:layout_height="0dp"
  27. android:layout_weight="2"
  28. android:background="@drawable/et_common_bg"
  29. android:id="@+id/et_input_msg"
  30. android:gravity="top"//写上top默认就在上面
  31. />
  32. <Button
  33. android:id="@+id/btn_send_msg"
  34. android:layout_width="wrap_content"
  35. android:layout_height="wrap_content"
  36. android:layout_gravity="center_horizontal"
  37. android:background="@drawable/btn_common_bg"
  38. android:paddingLeft="10dp"
  39. android:paddingRight="10dp"
  40. android:text="发送短信" />
  41. </LinearLayout>
代码
  1. public class NewMessageUI extends Activity implements OnClickListener {
  2. private AutoCompleteTextView actv;
  3. private ImageView selectContact;
  4. private EditText inputMsg;
  5. protected void onCreate(android.os.Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_new_message);
  8. actv = (AutoCompleteTextView) findViewById(R.id.actv);
  9. selectContact = (ImageView) findViewById(R.id.iv_select_contact);
  10. inputMsg = (EditText) findViewById(R.id.et_input_msg);
  11. selectContact.setOnClickListener(this);
  12. findViewById(R.id.btn_send_msg).setOnClickListener(this);
  13. adapter = new ACTVAdapter(this, null);
  14. actv.setAdapter(adapter);
  15. adapter.setFilterQueryProvider(new FilterQueryProvider() {
  16. @Override
  17. /**
  18. * 当actv 中的内容发生改变时,回调此方法
  19. * @param constraint
  20. * @return
  21. */
  22. public Cursor runQuery(CharSequence constraint) {
  23. System.out.println(constraint);
  24. Cursor cursor = getContentResolver().query(MyConstants.URI_CONTACTS, projection, "data1 like '%"+constraint+"%'", null, null);
  25. return cursor;
  26. }
  27. });
  28. }
  29. /**
  30. * 要查询的列
  31. */
  32. private String[] projection = {
  33. "_id","data1","display_name"
  34. };
  35. private final int INDEX_NAME=2;
  36. private final int INDEX_NUMBER=1;
  37. private ACTVAdapter adapter;
  38. class ACTVAdapter extends CursorAdapter{
  39. public ACTVAdapter(Context context, Cursor c) {
  40. super(context, c);
  41. }
  42. @Override
  43. /**
  44. * 该方法在点击actv中弹出的listView时,将返回值设置给 actv
  45. */
  46. public CharSequence convertToString(Cursor cursor) {
  47. return cursor.getString(INDEX_NUMBER);
  48. }
  49. @Override
  50. public View newView(Context context, Cursor cursor, ViewGroup parent) {
  51. View view = View.inflate(context, R.layout.list_item_actv, null);
  52. return view;
  53. }
  54. @Override
  55. public void bindView(View view, Context context, Cursor cursor) {
  56. TextView name = (TextView) view.findViewById(R.id.tv_name_actv);
  57. TextView number = (TextView) view.findViewById(R.id.tv_number_actv);
  58. name.setText(cursor.getString(INDEX_NAME));
  59. number.setText(cursor.getString(INDEX_NUMBER));
  60. }
  61. }
  62. @Override
  63. public void onClick(View v) {
  64. switch (v.getId()) {
  65. case R.id.btn_send_msg:// 发送短信的按钮
  66. String address = actv.getText().toString();
  67. if(TextUtils.isEmpty(address.trim())){
  68. Toast.makeText(this, "请输入收件人号码", 0).show();
  69. return ;
  70. }
  71. String msg = inputMsg.getText().toString();
  72. if(TextUtils.isEmpty(msg.trim())){
  73. Toast.makeText(this, "请输入短信内容", 0).show();
  74. return ;
  75. }
  76. // 开始发送短信
  77. Tools.sendMessage(this, msg, address);
  78. // 清空输入框
  79. inputMsg.setText("");
  80. break;
  81. case R.id.iv_select_contact:// 点击选择联系人的图片
  82. Intent intent = new Intent();
  83. intent.setAction("android.intent.action.PICK");//不能显示启动,因为有可能系统程序的类名改变了
  84. intent.setData(Uri.parse("content://com.android.contacts/contacts"));
  85. // startActivity(intent);
  86. startActivityForResult(intent, 99);
  87. break;
  88. default:
  89. break;
  90. }
  91. };
  92. @Override
  93. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  94. String stringExtra = data.getStringExtra("phone");
  95. System.out.println("stringExtra::"+stringExtra);
  96. Uri uri = data.getData();
  97. Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null);
  98. // Tools.printCursor(cursor);
  99. cursor.moveToNext();// 返回的cursor默认指向-1行 ,
  100. int contactId = cursor.getInt(0); // 仅查询一列,所以列的索引值 输入 0
  101. Cursor cursor2 = getContentResolver().query(MyConstants.URI_CONTACTS, new String[]{"data1"}, " contact_id = "+contactId, null, null);
  102. cursor2.moveToNext();// 返回的cursor默认指向-1行 ,
  103. String number = cursor2.getString(0);
  104. actv.setText(number);
  105. }
  106. }
Tools 添加方法
  1. /**
  2. * 发送短信
  3. * @param ctx
  4. * @param msg 短信内容
  5. * @param address 收信人的电话号码
  6. */
  7. public static void sendMessage(Context ctx, String msg, String address) {
  8. SmsManager smsManager = SmsManager.getDefault();
  9. //对短信内容进行切割,防止,内容过长。
  10. ArrayList<String> msgList = smsManager.divideMessage(msg);
  11. //用于启动广播的意图
  12. Intent intent = new Intent("com.itheima.smsmanager39.receive.SmsSendSuccessReceiver");
  13. PendingIntent sentIntent = PendingIntent.getBroadcast(ctx, 88, intent, PendingIntent.FLAG_ONE_SHOT);
  14. for (int i = 0; i < msgList.size(); i++) {
  15. String oneMsg = msgList.get(i);
  16. smsManager.sendTextMessage(
  17. address, // 收信人号码
  18. null, // 短信服务中心的号码
  19. oneMsg, // 要发送的内容
  20. sentIntent, // 我们发送成功后的,隐式意图
  21. null); // 对方接收成功后的,隐式意图
  22. }
  23. insertMsg2msmDb(ctx,msg,address);
  24. }
  25. /**
  26. * 将短信内容插入系统数据库
  27. * @param ctx
  28. * @param msg 短信内容
  29. * @param address 收短信的号码
  30. */
  31. private static void insertMsg2msmDb(Context ctx, String msg, String address) {
  32. ContentValues values = new ContentValues();
  33. values.put("address", address);
  34. values.put("body", msg);
  35. values.put("type", MyConstants.TYPE_SEND);
  36. ctx.getContentResolver().insert(MyConstants.URI_SMS, values);
  37. }
自定义广播,需要清单文件写action
  1. public class SmsSendSuccessReceiver extends BroadcastReceiver{
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. Toast.makeText(context, "短信已经发送成功", 0).show();
  5. }
  6. }
清单文件:注意输入的模式就变了,发送按钮在输入法上面了
  1. <activity
  2. android:name="com.itheima.smsmanager39.NewMessageUI"
  3. android:label="@string/app_name"
  4. android:windowSoftInputMode="adjustResize">
  5. </activity>

5.AutoCompleteTextView、自定义广播的更多相关文章

  1. android 发送自定义广播以及接收自定义广播

    发送自定义广播程序: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  2. Android(java)学习笔记178:BroadcastReceiver之 自定义广播

    广播使用:               电台:对外发送信号.---------电台发送广播(可以自定义)               收音机:接收电台的信号.-----广播接收者 这里,我们就说明自定 ...

  3. [android] 自定义广播事件

    上一节的短信拦截在4.0以上系统中无效,可以使用这种办法实现,定义一个activity,清单文件中指定主题为透明,在onCreate()方法里面直接调用finsh()方法,关掉,这样可以就可以实现了 ...

  4. android: 发送自定义广播

    5.3.1    发送标准广播 在发送广播之前,我们还是需要先定义一个广播接收器来准备接收此广播才行,不然发 出去也是白发.因此新建一个 MyBroadcastReceiver 继承自 Broadca ...

  5. 自定义广播(BroadcastReceiver)事件 --Android开发

    本例演示自定义广播事件.我们需要做的是,在主活动中写发送广播的代码,然后在接收广播的类中写接收广播的代码. 1.主活动中点击按钮后发送广播 MainActivity.java: public clas ...

  6. Android8自定义广播无法收到消息

    在Android 8之前,如果要发送自定义的静态广播,做好其他配置后,只需实例化一个Intent对象intent,然后将其作为参数传入sendBroadcast()方法中即可,例如 Intent in ...

  7. android中实现自定义广播

    自定义广播分两个步骤:1.发送广播 2.接收广播 一.先看如何接收广播: 我使用的是Android Studio,File->New->Other->Broadcast Receiv ...

  8. MIUI7,Android版本5.0.2,一个程序发送自定义广播,另一个程序没有接收到

    对照<第一行代码——Android>进行学习,第五章中说到广播包的相关知识,前面获取广播等程序例程都可以跑的通,但是在5.3.2节中,程序A发送自定义广播,并接收自定义广播,同时程序B也接 ...

  9. Android(java)学习笔记121:BroadcastReceiver之 自定义广播

    广播使用:               电台:对外发送信号.---------电台发送广播(可以自定义)               收音机:接收电台的信号.-----广播接收者 这里,我们就说明自定 ...

随机推荐

  1. Mapnik 3.0.20编译安装

    1. 确定epel安装 yum install -y epel-release 2. 按照<CentOS7.2部署node-mapnik>一文中的步骤,手动安装 gcc-6.2.0 和 b ...

  2. 找不到org.restlet.ext.jackson 解决办法

    检出 转成maven工程 ,不过最后发现有两个包maven没有找到: <dependency> <groupId>org.restlet.jse</groupId> ...

  3. docker log driver

    驱动程序 描述 none 容器没有日志可用,docker logs 什么都不返回 json-file 日志格式化为 JSON.这是 Docker 默认的日志驱动程序. syslog 将日志消息写入 s ...

  4. mysql执行sql语句过程

    开发人员基本都知道,我们的数据存在数据库中(目前最多的是mysql和oracle,由于作者更擅长mysql,所以这里默认数据库为mysql),服务器通过sql语句将查询数据的请求传入到mysql数据库 ...

  5. 转 Java操作PDF之iText详细入门

    转 Java操作PDF之iText详细入门 2016年08月08日 11:06:00 阅读数:19490 iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成 ...

  6. win10修改TXT文件的关联软件

    打开注册表,按下面路径找: HKEY_CLASSES_ROOT -> txtfile -> shell -> open -> command 在右边可以看到一个默认文件,原来的 ...

  7. win10无法访问服务器上的共享文件夹怎么设置,提示:你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问

    此问题需要修改Win10 网络策略 按window+R键输入gpedit.msc 来启动本地组策略编辑器. 依次找到“计算机配置-管理模板-网络-Lanman工作站”这个节点,在右侧内容区可以看到“启 ...

  8. SVN与资源库同步后动作的字母意义

    U:表示从服务器收到文件更新了G:表示本地文件以及服务器文件都以更新,而且成功的合并了A:表示有文件或者目录添加到工作目录R:表示文件或者目录被替换了C:表示文件的本地修改和服务器修改发生冲突

  9. 第二周工作总结——NWNU李泓毅

    注:因作业未全部提交完毕,故评分细则和千帆图等评分事项推后 1.助教博客链接:https://www.cnblogs.com/lmcmha/ 2.本周点评作业: https://www.cnblogs ...

  10. 解决更新ssh后在/etc/init.d下无sshd的问题

    1.将远程服务器的/etc/init.d/ssd  文件拷贝到本地 scp /etc/init.d/ssh  root@IP地址:/etc/init.d 2.vi /etc/init.d/sshd 3 ...