新建信息


布局:自动出来的是系统的组件,里面是listview,写ontextchanglis也行
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    1. android:layout_width="match_parent"
    1. android:layout_height="match_parent"
    1. android:padding="5dp"
    1. android:orientation="vertical" >
    1. 。。。。。
    1. <!-- android:completionThreshold="1" 当弹出建议框的时候,actv中输入的字符的个数 -->
    1. <AutoCompleteTextView
    1. android:layout_width="0dp"
    1. android:layout_weight="2"
    1. android:layout_height="wrap_content"
    1. android:id="@+id/actv"
    1. android:textColor="@android:color/black"
    1. android:completionThreshold="1"
    1. android:background="@drawable/et_common_bg"
    1. />
    1. <ImageView
    1. android:layout_width="wrap_content"
    1. android:layout_height="wrap_content"
    1. android:background="@drawable/select_contact_bg"
    1. android:id="@+id/iv_select_contact"
    1. />
    1. </LinearLayout>
    1. <EditText
    1. android:layout_width="match_parent"
    1. android:layout_height="0dp"
    1. android:layout_weight="2"
    1. android:background="@drawable/et_common_bg"
    1. android:id="@+id/et_input_msg"
    1. android:gravity="top"//写上top默认就在上面
    1. />
    1. <Button
    1. android:id="@+id/btn_send_msg"
    1. android:layout_width="wrap_content"
    1. android:layout_height="wrap_content"
    1. android:layout_gravity="center_horizontal"
    1. android:background="@drawable/btn_common_bg"
    1. android:paddingLeft="10dp"
    1. android:paddingRight="10dp"
    1. android:text="发送短信" />
    1. </LinearLayout>
代码
    1. public class NewMessageUI extends Activity implements OnClickListener {
    1. private AutoCompleteTextView actv;
    1. private ImageView selectContact;
    1. private EditText inputMsg;
    1. protected void onCreate(android.os.Bundle savedInstanceState) {
    1. super.onCreate(savedInstanceState);
    1. setContentView(R.layout.activity_new_message);
    1. actv = (AutoCompleteTextView) findViewById(R.id.actv);
    1. selectContact = (ImageView) findViewById(R.id.iv_select_contact);
    1. inputMsg = (EditText) findViewById(R.id.et_input_msg);
    1. selectContact.setOnClickListener(this);
    1. findViewById(R.id.btn_send_msg).setOnClickListener(this);
    1. adapter = new ACTVAdapter(this, null);
    1. actv.setAdapter(adapter);
    1. adapter.setFilterQueryProvider(new FilterQueryProvider() {
    1. @Override
    1. /**
    1. * 当actv 中的内容发生改变时,回调此方法
    1. * @param constraint
    1. * @return
    1. */
    1. public Cursor runQuery(CharSequence constraint) {
    1. System.out.println(constraint);
    1. Cursor cursor = getContentResolver().query(MyConstants.URI_CONTACTS, projection, "data1 like '%"+constraint+"%'", null, null);
    1. return cursor;
    1. }
    1. });
    1. }
    1. /**
    1. * 要查询的列
    1. */
    1. private String[] projection = {
    1. "_id","data1","display_name"
    1. };
    1. private final int INDEX_NAME=2;
    1. private final int INDEX_NUMBER=1;
    1. private ACTVAdapter adapter;
    1. class ACTVAdapter extends CursorAdapter{
    1. public ACTVAdapter(Context context, Cursor c) {
    1. super(context, c);
    1. }
    1. @Override
    1. /**
    1. * 该方法在点击actv中弹出的listView时,将返回值设置给 actv
    1. */
    1. public CharSequence convertToString(Cursor cursor) {
    1. return cursor.getString(INDEX_NUMBER);
    1. }
    1. @Override
    1. public View newView(Context context, Cursor cursor, ViewGroup parent) {
    1. View view = View.inflate(context, R.layout.list_item_actv, null);
    1. return view;
    1. }
    1. @Override
    1. public void bindView(View view, Context context, Cursor cursor) {
    1. TextView name = (TextView) view.findViewById(R.id.tv_name_actv);
    1. TextView number = (TextView) view.findViewById(R.id.tv_number_actv);
    1. name.setText(cursor.getString(INDEX_NAME));
    1. number.setText(cursor.getString(INDEX_NUMBER));
    1. }
    1. }
    1. @Override
    1. public void onClick(View v) {
    1. switch (v.getId()) {
    1. case R.id.btn_send_msg:// 发送短信的按钮
    1. String address = actv.getText().toString();
    1. if(TextUtils.isEmpty(address.trim())){
    1. Toast.makeText(this, "请输入收件人号码", 0).show();
    1. return ;
    1. }
    1. String msg = inputMsg.getText().toString();
    1. if(TextUtils.isEmpty(msg.trim())){
    1. Toast.makeText(this, "请输入短信内容", 0).show();
    1. return ;
    1. }
    1. // 开始发送短信
    1. Tools.sendMessage(this, msg, address);
    1. // 清空输入框
    1. inputMsg.setText("");
    1. break;
    1. case R.id.iv_select_contact:// 点击选择联系人的图片
    1. Intent intent = new Intent();
    1. intent.setAction("android.intent.action.PICK");//不能显示启动,因为有可能系统程序的类名改变了
    1. intent.setData(Uri.parse("content://com.android.contacts/contacts"));
    1. // startActivity(intent);
    1. startActivityForResult(intent, 99);
    1. break;
    1. default:
    1. break;
    1. }
    1. };
    1. @Override
    1. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    1. String stringExtra = data.getStringExtra("phone");
    1. System.out.println("stringExtra::"+stringExtra);
    1. Uri uri = data.getData();
    1. Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null);
    1. // Tools.printCursor(cursor);
    1. cursor.moveToNext();// 返回的cursor默认指向-1行 ,
    1. int contactId = cursor.getInt(0); // 仅查询一列,所以列的索引值 输入 0
    1. Cursor cursor2 = getContentResolver().query(MyConstants.URI_CONTACTS, new String[]{"data1"}, " contact_id = "+contactId, null, null);
    1. cursor2.moveToNext();// 返回的cursor默认指向-1行 ,
    1. String number = cursor2.getString(0);
    1. actv.setText(number);
    1. }
    1. }
Tools 添加方法
    1. /**
    1. * 发送短信
    1. * @param ctx
    1. * @param msg 短信内容
    1. * @param address 收信人的电话号码
    1. */
    1. public static void sendMessage(Context ctx, String msg, String address) {
    1. SmsManager smsManager = SmsManager.getDefault();
    1. //对短信内容进行切割,防止,内容过长。
    1. ArrayList<String> msgList = smsManager.divideMessage(msg);
    1. //用于启动广播的意图
    1. Intent intent = new Intent("com.itheima.smsmanager39.receive.SmsSendSuccessReceiver");
    1. PendingIntent sentIntent = PendingIntent.getBroadcast(ctx, 88, intent, PendingIntent.FLAG_ONE_SHOT);
    1. for (int i = 0; i < msgList.size(); i++) {
    1. String oneMsg = msgList.get(i);
    1. smsManager.sendTextMessage(
    1. address, // 收信人号码
    1. null, // 短信服务中心的号码
    1. oneMsg, // 要发送的内容
    1. sentIntent, // 我们发送成功后的,隐式意图
    1. null); // 对方接收成功后的,隐式意图
    1. }
    1. insertMsg2msmDb(ctx,msg,address);
    1. }
    1. /**
    1. * 将短信内容插入系统数据库
    1. * @param ctx
    1. * @param msg 短信内容
    1. * @param address 收短信的号码
    1. */
    1. private static void insertMsg2msmDb(Context ctx, String msg, String address) {
    1. ContentValues values = new ContentValues();
    1. values.put("address", address);
    1. values.put("body", msg);
    1. values.put("type", MyConstants.TYPE_SEND);
    1. ctx.getContentResolver().insert(MyConstants.URI_SMS, values);
    1. }
自定义广播,需要清单文件写action
    1. public class SmsSendSuccessReceiver extends BroadcastReceiver{
    1. @Override
    1. public void onReceive(Context context, Intent intent) {
    1. Toast.makeText(context, "短信已经发送成功", 0).show();
    1. }
    1. }
清单文件:注意输入的模式就变了,发送按钮在输入法上面了
    1. <activity
    1. android:name="com.itheima.smsmanager39.NewMessageUI"
    1. android:label="@string/app_name"
    1. android:windowSoftInputMode="adjustResize">
    1. </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. Eclipse中查看JDK类库源代码

    在Eclipse中编写代码时,有时候可能需要了解JDK类库的一些特性,这个时候可以通过查看类的源代码来了解JDK类的详细信息.本文主要内容就是如何直接在Eclipse开发环境中查看JDK类库源代码. ...

  2. python读取数据库出txt报表

    python出报表使用到了数据库访问,文件读写,字符串切片处理.还可以扩展到电子邮件的发送,异常处理以及定时批任务. 总之在学习中发现还是有蛮多乐趣在其中. #coding=utf-8 ' impor ...

  3. freeze

    当我们开发项目的时候,会用virtualenv创建很多python独立环境这时候会出现在不同环境下安装相同的模块的情况,为了避免我们通过联网所需模块,不如我们直接从之前Python环境已有的模块中直接 ...

  4. Visual Studio Installer 使用案例

    1.创建自定义操作 一步:新建“安装程序类”文件 2.重写函数: public override void Install(IDictionary stateSaver) { base.Install ...

  5. 使用Druid作为SpringBoot项目数据源(添加监控)

    Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容数据库,包括了Oracle.MySQL.PostgreSQL.SQL Server.H2等.Druid在监 ...

  6. jquery倒计时按钮常用于验证码倒计时

    <!doctype html><html><head> <meta charset="utf-8"> <title>jq ...

  7. java反射获取Object的属性和值

    在看反射顺便做个笔记,目前知道的反射的Object都是要有对象的也就是实体Bean. import java.lang.reflect.Field; import java.util.ArrayLis ...

  8. 结果集ResultSet

    我们访问数据库时候经常见到这样遍历结果集 conn = DBHelper.getConnection(); String sql = "select * from items"; ...

  9. 环境搭建文档——Windows下的Git搭建详解

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.具体安装步骤如下: 第一步:先从官网下载最新版本的Git 官网地址:https://git-scm.com/do ...

  10. sql批量新增,修改

    <insert id="insertExtDocList" parameterType="map"> INSERT INTO extprjdoc ( ...