监听短信数据库 实现自动填写到EditText

来源:互联网 发布:网络聚众赌博怎么处理 编辑:程序博客网 时间:2024/05/22 01:56
<span style="font-size:32px;color:#ff0000;">实</span><span style="font-size:32px;color:#ff0000;">现类似支付宝那样的获得短信动态码后自动填写到EditText </span>
   
 private SmsContent contentObservable;
</pre><pre class="java" name="code">
contentObservable = new SmsContent(new Handler());        //注册短信变化监听          this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, contentObservable);
</pre><pre class="java" name="code">
/*   * 监听短信数据库   */  class SmsContent extends ContentObserver {    private Cursor cursor = null;    public SmsContent(Handler handler) {      super(handler);      // TODO Auto-generated constructor stub    }    @SuppressWarnings("deprecation")    @Override    public void onChange(boolean selfChange) {      // TODO Auto-generated method stub      super.onChange(selfChange);      // 读取收件箱中指定号码的短信      cursor = managedQuery(Uri.parse("content://sms/inbox"),          new String[] { "_id", "address", "read", "body" },          " address=? and read=?",          new String[] { "10010", "0" }, "_id desc");      // 按id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了      if (cursor != null && cursor.getCount() > 0) {        ContentValues values = new ContentValues();        values.put("read", "1"); // 修改短信为已读模式        cursor.moveToNext();        int smsbodyColumn = cursor.getColumnIndex("body");        String smsBody = cursor.getString(smsbodyColumn);        EditText editText = (EditText)findViewById(R.id.editText1);        editText.setText(smsBody);      }      // 在用managedQuery的时候,不能主动调用close()方法, 否则在Android 4.0+的系统上, 会发生崩溃      if (Build.VERSION.SDK_INT < 14) {        cursor.close();      }    }  }

1,在AndroidManifest当中需要的权限:
<!-- 发送短信-->   <uses-permission android:name="android.permission.SEND_SMS" />    <!-- 阅读消息 -->    <uses-permission android:name="android.permission.READ_SMS" />    <!-- 写入消息 -->    <uses-permission android:name="android.permission.WRITE_SMS" />    <!-- 接收消息 -->    <uses-permission android:name="android.permission.RECEIVE_SMS" />

2,在oncreate()方法中注册短信库的监听:

content = new SmsContent(new Handler());          //注册短信变化监听          this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);
3,SmsContent自定义的ContentObserver: 

0 0