(SMS_RECEIVED.equals(intent.getAction())) {
Log.d(TAG, "sms received!");
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
if (messages.length > 0) {
String content = messages[0].getMessageBody();
String sender = messages[0].getOriginatingAddress();
long msgDate = messages[0].getTimestampMillis();
String smsToast = "New SMS received from : "
+ sender + "\n'"
+ content + "'";
Toast.makeText(context, smsToast, Toast.LENGTH_LONG)
.show();
Log.d(TAG, "message from: " + sender + ", message body: " + content
+ ", message date: " + msgDate);
//自己的逻辑
}
}
cursor = context.getContentResolver().query(Uri.parse("content://sms"), new String[] { "_id", "address", "read", "body", "date" }, "read = ? ", new String[] { "0" }, "date desc");
if (null == cursor){
return;
}
Log.i(TAG,"m cursor count is "+cursor.getCount());
Log.i(TAG,"m first is "+cursor.moveToFirst());
}
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "Exception : " + e);
} finally {
if (cursor != null) {
cursor.close();
cursor = null;
}
}
}
}
这个很简单就是定义一个广播接收者,并且在清单文件中注册(注册有两种方式,这里就不展开了)
<receiver android:name=".message.SmsReceiver" android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_DELIVER" />
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
3.Android 4.4以上版本短信权限问题
Android4.4版本之前,短信有着一个问题,任何应用只要想,就可以操作短信,着包括监听短信、修改短信、删除短信、拦截短信等,因而市面上有着成片的短信应用,着也使得Android系统短信的管理变得越发的混乱。
针对这个问题Google在Android4.4版本之后,引进了一个新的概念----默认短信应用。即用户可以在系统中选择由哪个应用默认对短信进行处理。
针对Android4.4版本的,Google提供了 SMS_DELIVER_ACTION(sms)和 WAP_PUSH_DELIVER_ACTION(MMS)这两个intent给默认的短信使用,也就是说只有默认短信才可以收到这两个广播,也只有收到这两个广播的短信应用才可以对短信数据库机型操作,其他的短信应用可以使用SMS_RECEIVED_ACTION对短信进行监听,但仅仅只能读取(理论上可以监听,但是在一台6.0系统的三星机器上并不能监听到,具体什么原因没查出来,当然这是在我所写的应用没有成为手机默认短信应用的情况下,当设置为默认短信应用后监听也是正常的)
另外,值得一提的是,在Android4.4版本之前SMS_RECEIVED_ACTION是一个有序广播,这意味着在Android4.4版本之前,应用在接受广播之后可以对广播进行拦截;但是在Android4.4之后,这个拦截动作不会生效,这就意味着Android4.4之后,非默认短信应用对短信除了读操作外,没有更多的权限了
4.Android4.4版本以上设置默认短信应用
我们已经分析了Android4.4版本之后短信的改变----默认短信应用,但是并不是每个应用都可以被设置为默认短信应用,接下来我们来实现一下怎么让我们的短信应用可以被设置为默认短息应用。
<!-- BroadcastReceiver that listens for incoming MMS messages -->
<receiver android:name=".message.MmsReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<!-- Activity t