android 读取短信内容

访问短信内容需要配置的权限:
  <uses-permission android:name = "android.permission.RECEIVE_SMS"/>     
  <uses-permission android:name="android.permission.READ_SMS" /> 
--Heart-result--:{"code":400,"message":"Access token deny"}

   第一步:继承BroadcastReceiver,并重写onReceive()方法。

              public class IncomingSMSReceiver extends BroadcastReceiver {

                     @Override public void onReceive(Context context, Intent intent) {

                     }

              }

              第二步:订阅感兴趣的广播Intent,订阅方法有两种:

                     第一种:使用代码进行订阅

                            <!-- android.provider.Telephony.SMS_RECEIVED 是短信广播-- >

                            IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

                            IncomingSMSReceiver receiver = new IncomingSMSReceiver();

                            registerReceiver(receiver, filter);

                     第二种:在AndroidManifest.xml文件中的<application>节点里进行订阅:

                            <receiver android:name=".IncomingSMSReceiver">

                                <intent-filter>

                                     <action android:name="android.provider.Telephony.SMS_RECEIVED"/>

                                </intent-filter>

                            </receiver>


方式一:通过广播监听短信消息

(注意:这种方式只对新收到的短消息有效,运行代码,并不会读取收件箱中已读或未读的消息,只有当收到新来的短消息时,才会执行onChange方法)

缺点:通过设置priority的数值,其实有时是不管用的,现在在一些定制的系统或是有安全软件的情况下,往往短消息都被截取到,并被干掉。

方式二:通过短信数据库获取短信内容

新起一个线程进行读取短信

number:106901407187   body:您提交了重置应用rkwatch的用户密码,验证码:808220,请妥善保管,并及时提交重置密码。【rkwatch】  time:1455801191000

substring(int1,int2)取原字符串中从左往右第int1到int2个字符组成的字符串


protocol:协议0 SMS_RPOTO短信,1 MMS_PROTO彩信

content://sms/               所有短信
content://sms/inbox        收件箱
content://sms/sent        已发送
content://sms/draft        草稿
content://sms/outbox        发件箱
content://sms/failed        发送失败
content://sms/queued        待发送列表

观察者模式实现短信内容读取:  
  private SmsObserver smsObserver;  
   smsObserver = new SmsObserver(ResetPwd.this,mHandler);  
  getContentResolver().registerContentObserver(SMS_INBOXtrue,smsObserver);    
         class   SmsObserver   extends  ContentObserver {  
            public SmsObserver(Context context, Handler handler) {  
                super(handler);  
            }  
            @Override  
            public void onChange(boolean selfChange) {  
                super.onChange(selfChange);  
                //每当有新短信到来时,使用我们获取短消息的方法  
                getSmsFromPhone();  
            }  
        }
     public   void  getSmsFromPhone() {  
            ContentResolver cr = getContentResolver();  
            String[] projection = new String[] { "body" };//"_id", "address", "person",, "date", "type  
            String where = " date > "  
                    + (System.currentTimeMillis() - 60*1000);  
            Cursor cur = cr.query(SMS_INBOX, projection, where, null"date desc");  
                                    //查询参数      条件          where  group by order by
            if (null == cur)  
                return;  
            if (cur.moveToNext()) {  
          //      String number = cur.getString(cur.getColumnIndex("address"));
               //手机号   使用时需要在 projection初始化才行
          //      String name = cur.getString(cur.getColumnIndex("person"));//联系人姓名列表  
                String body = cur.getString(cur.getColumnIndex("body"));  
                Log.i("lzx","--body-"+body+"-subString-"+body.substring(25,31));
                mvalidcode.setText(body.substring(25,31));
            }  
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值