访问短信内容需要配置的权限:


  <uses-permissionandroid:name = "android.permission.RECEIVE_SMS"/>     


<uses-permissionandroid: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方法)


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

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

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;   
 
 
   
  smsObservernew SmsObserver(ResetPwd.this,mHandler);  
 
 SMS_INBOX, true,smsObserver);     
 
 
   
       
 class 
   
 SmsObserver 
   
 extends 
  ContentObserver {   
 
 
public
 
super(handler);  
 
            }  
 
@Override
 
public void onChange(boolean
 
super.onChange(selfChange);  
 
//每当有新短信到来时,使用我们获取短消息的方法  
 
                getSmsFromPhone();  
 
            }  
 
        } 
     
 public 
   
 void 
  getSmsFromPhone() {   
 
 
            ContentResolver cr = getContentResolver();  
 
new String[] { "body" };//"_id", "address", "person",, "date", "type  
 
" date > "
 
currentTimeMillis() - 60*1000);  
 
SMS_INBOX, projection, where, null, "date desc");  
 
//查询参数      条件          where  group by order by
 
if (null
 
return;  
 
if
 
//      String number = cur.getString(cur.getColumnIndex("address"));
 
     
      
      
 //手机号   使用时需要在 
 projection初始化才行
 
//      String name = cur.getString(cur.getColumnIndex("person"));//联系人姓名列表  
 
"body"));  
 
i("lzx","--body-"+body+"-subString-"+body.substring(25,31));
 
mvalidcode.setText(body.substring(25,31));
 
            }  
 
        }