android 4.0版本手机接受多条短信分析
来源:互联网 发布:不会打扮的女生知乎 编辑:程序博客网 时间:2024/05/16 11:25
此方法内获取一个wake lock 然后启动SmsReceiverService服务MmsLog.d(MmsApp.TXN_TAG, "SmsReceiver: onReceiveWithPrivilege(). Slot Id = "
SmsReceiverService.java中启动该服务后,会调用onStartCommand方法,该方法传来的Intent为Message的Obj发送一条Message
在handleMessage方法里面通过Intent判断后执行相应的操作,如handleSmsSent,handleSmsReceived,handleBootCompleted,handleServiceStateChanged接受到短信时执行handleSmsReceived方法 private void handleSmsReceived(Intent intent, int error) { SmsMessage[] msgs = Intents.getMessagesFromIntent(intent); 该方法内通过Intents.getMessagesFromIntent(intent)方法从Intent里面取出Message[] 然后通过insertMessage(this, msgs)方法插入短信insertMessage里通过调用storeMessage方法 Uri messageUri = null; try { messageUri = insertMessage(this, intent, error, format); } catch (IllegalArgumentException e) { MmsLog.e(TAG, "Save message fail:" + e.getMessage(), e); return; }再在storeMessage方法执行values.put(Inbox.BODY, sms.getDisplayMessageBody())方法就可以将短信以ContentValues的形式插入数据库。storeMessage方法如果插入成功将会返回插入短信的Uri,如果此Uri不为Null,说明已经插入数据库,于是在SmsReceiverService.java 中 handleSmsReceived()中执行MessagingNotification.updateNewMessageIndicator(this, true);该方法则会根据短信的状态,发出提示音或震动,也可以根据设置notification自此,一条新信息就成功接受了。
主要log分析掌握:
//表示接受到短信广播,来了一条短信,
05-29 09:11:28.723844 20407 20407 D Mms/Txn : SmsReceiver: onReceiveWithPrivilege(). Slot Id = 0, Action = android.provider.Telephony.SMS_RECEIVED, result = -1
//短信内容
05-29 09:11:29.820343 20407 20443 D Mms/Txn : handleSmsReceived messageUri: content://sms/35, address: +8615901809630, body: QWERTY
long curTime = System.currentTimeMillis();
Log.d(TAG, "CNMA elplased time: " + (curTime - rTime));
if ((curTime - rTime) / 1000 > 8) {
Log.d(TAG, "APP process too long");
} else {
// For a multi-part message, this only ACKs the last
// part.
// Previous parts were ACK'd as they were received.
acknowledgeLastIncomingSms(success, rc, null);
}
------------------------------------
FW发送有序广播的时间点是08:00:31
003314 01-01 08:00:31.587 655 1047 V ActivityManager: Broadcast: Intent { act=android.provider.Telephony.SMS_RECEIVED flg=0x10 (has extras) } ordered=true userid=0
018183 01-01 08:00:40.753 1193 1193 D ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.provider.Telephony.SMS_RECEIVED flg=0x10 cmp=com.android.mms/.transaction.PrivilegedSmsReceiver (has extras) }, ordered=true, receiver=com.android.mms.transaction.PrivilegedSmsReceiver@413fda90
04460 01-01 08:00:40.766 1000 1000 D SMS : CNMA elplased time: 9185
04461 01-01 08:00:40.766 1000 1000 D SMS : APP process too long
--------------------------------------
(1)刚开机就去接收短信,容易发生超时现象,导致接收到重复短信。
有可能客户定制了一些广播放在开机阶段去处理,如果是这种情况,需要去掉这些广播再测试看看。
( 如果这些广播都是系统的,都是必须要处理的,目前这种情况没有优化方案)
(2)有三方应用在拦截该广播。有可能客户定制了一些apk,这些apk也在接收SMS_RECEIVED的广播,且这些apk定的优先级比较高,
如果是这种case,可以在mainLog里搜一下act=android.provider.Telephony.SMS_RECEIVED分别被什么app给接收到,顺序是怎样的,
- android 4.0版本手机接受多条短信分析
- android中级 ---接受短信
- android接受短信的BroadcastReceiver
- Android短信Mms接受流程
- android短信发送和接受
- android 发送短信和接受短信模块
- Android 接受短信和发送短信
- Android 双卡双待手机解析短信异常分析及解决
- Android 双卡双待手机解析短信异常分析及解决
- Android 手机发送短信
- Android开发之短信接受教程
- Android中短信发送与接受
- Android自定义短信接受弹框提示
- 手机无法发送只能接受短信的解决办法
- 关于小米手机使用广播无法接受短信的问题
- Android 4.0及以下版本短信漏洞
- android 短信管理(获取接受到短信的消息)
- Android监听发送短信和接受短信的事件
- iOS开发之Objective-C与JavaScript的交互
- 日经社説 20150127 共通の土俵で安保を論じよ
- wcf 五通信模式
- 【iOS开发】企业版证书($299)In-House方式发布指南
- outside of class is not definition
- android 4.0版本手机接受多条短信分析
- c++模板类学习简单
- hdu 2089 不要62 DP
- OC class override
- Coderforces 507B 易错
- android:onClick attribute
- 日经社説 20150127 ギリシャ新政権・EUは現実的に協調を
- java 泛型
- [转]欧拉函数公式及其证明