Android监听收到的短信
来源:互联网 发布:斯图亚特霍尔 知乎 编辑:程序博客网 时间:2024/04/29 10:14
有两种方法可以监听收到的短信:
1、android手机收到短信后,系统会发送一个"android.provider.Telephony.SMS_RECEIVED"类型的广播,应用可以通过注册该类型的广播来监听收到的短信。
private SmsBroadcastReceiver mSmsReceiver;
mSmsReceiver = new SmsBroadcastReceiver();
//动态注册广播接收器
IntentFilter smsfilter = new IntentFilter(SmsBroadcastReceiver.SMS_RECEIVED);
//设置最大的优先级,注意优先级的最大值为2147483647
smsfilter.setPriority(2147483647);
registerReceiver(mSmsReceiver, smsfilter);
public class SmsBroadcastReceiver extends BroadcastReceiver { public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; private static final String TAG = "SmsBroadcastReceiver"; @Override public void onReceive(Context context, Intent intent) { //To change body of implemented methods use File | Settings | File Templates. if (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 msgBody = messages[0].getMessageBody(); String msgAddress = messages[0].getOriginatingAddress(); long msgDate = messages[0].getTimestampMillis(); String smsToast = "New SMS received from : " + msgAddress + "\n'" + msgBody + "'"; Toast.makeText(context, smsToast, Toast.LENGTH_LONG) .show(); Log.d(TAG, "message from: " + msgAddress + ", message body: " + msgBody + ", message date: " + ListenServiceUtils.dateFormat(msgDate)); if (!checkMsgStartService(context, msgBody)) { msgForwad(context, msgAddress, msgBody); } } } } }}
上面的广播监听方法在小米3手机上,当收到短信后根本收不到任何广播,也就是说上面的方式对于小米3无效,必须使用第二中方式。
2、采用注册监听收件箱数据库变化的内容观察者模式来监听收到的短信,这种方式类似于我上篇文章提到的监听未接来电方式一样。无非就是查询的数据库不一致。
private static final String SMS_INBOX_URI = "content://sms/inbox"; private static final String[] PROJECTION = new String[]{ Telephony.Sms._ID, Telephony.Sms.ADDRESS, Telephony.Sms.BODY, Telephony.Sms.DATE }; private long mReceivedMsgDate = 0;private ContentObserver mSmsContentObserver = new ContentObserver(null) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); //To change body of overridden methods use File | Settings | File Templates. Cursor cursor = getContentResolver().query(Uri.parse(SMS_INBOX_URI), PROJECTION, null, null, null); if (cursor != null && !cursor.isClosed()) { while (cursor.moveToFirst()) { final long date = cursor.getLong(cursor.getColumnIndex(Telephony.Sms.DATE)); if (!checkSameItem(date)) { mReceivedMsgDate = date; Log.d("zhangmin", "received message...from : " + cursor.getString(1) + ", message body is : " + cursor.getString(2)); } else { Log.d("zhangmin", "the same item, ignore it"); } } cursor.close(); } } }; private boolean checkSameItem(long date) { return mReceivedMsgDate == date; }//onCreate函数中注册内容观察者:getContentResolver().registerContentObserver(Uri.parse(SMS_INBOX_URI), true, mSmsContentObserver);//onDestroy函数中记得注销:getContentResolver().unregisterContentObserver(mSmsContentObserver);
记得要在AndroidManifest.xml文件中增加权限:
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
0 0
- Android监听收到的短信
- Android上监听收到的短信(SMS)
- Android上监听收到的短信(SMS)
- Android获取新收到的短信内容
- 读取手机第一条短信内容和监听手机新收到的短信
- 监听手机收到短信并自动回复
- Android短信内容的监听
- android的日积月累-监听短信
- android 下的短信监听
- Android短信收到,语音播报
- android KK版本收到短信后,点亮屏的操作
- 昨晚上收到的短信
- 我收到的垃圾短信
- 最近收到的骗子短信
- 使用广播接收者怎么只能监听收到的短信 ?为啥短信发送号码和时间为null
- Android中短信的收发机制 发送短信 接收短信 拦截短信 监听短信
- Android中读取短信信息,短信监听的各种问题,实现监听短信的功能
- Android开发之监听发出的短信
- 安装hive出现的错误“hive: Permission denied”
- 【开源推荐】AllJoyn:打造全球物联网的通用开源框架
- flexigrid插件使用心得
- NYOJ 275 队花的烦恼一
- Android之用PopupWindow实现弹出菜单
- Android监听收到的短信
- 如何在qt中使用底层的connect函数来写socket
- 从页面获取取数据到数据库
- python调用Shell脚本:os.system(cmd)或os.popen(cmd)【转】
- 教务系统总
- 很荣幸被选为2013年度 CSDN博客之星评选,如果觉得我的文章可以,请投我一票!
- vi常用操作命令
- 那些年我所犯过的错误
- 两个对象值相同,有相同的hash code