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

<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: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值