How to analyze incoming SMS on Android?
我如何在 Android 中进行编码,以便我的应用可以分析传入的 SMS,并可能在 SMS 实际发出通知通知用户有新 SMS 之前阻止它或执行某些操作(可能移动到不同的 SMS 文件夹)?我会针对 Android 2.1 及更高版本。
我想分析传入的 SMS 是否有用户指定的垃圾邮件词,如果发现我想删除/标记为已读/将消息移动到不同的文件夹。
我使用这段代码,作为广播接收器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public void onReceive(Context context, Intent intent) { //this stops notifications to others this.abortBroadcast(); //---get the SMS message passed in--- Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; String str =""; if (bundle != null) { //---retrieve the SMS message received--- Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; for (int i=0; i<msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); str +="SMS from" + msgs[i].getOriginatingAddress(); from = msgs[i].getOriginatingAddress(); str +=" :"; str += msgs[i].getMessageBody().toString(); msg = msgs[i].getMessageBody().toString(); str +="\ "; } if(checksomething){ //make your actions //and no alert notification and sms not in inbox } else{ //continue the normal process of sms and will get alert and reaches inbox this.clearAbortBroadcast(); } } |
记得在清单中添加它并添加广播的最高优先级(100),否则短信将首先进入收件箱并收到警报通知。
1 2 3 4 5 | <receiver android:name=".SmsReceiver"> <intent-filter android:priority="100"> </action> </intent-filter> </receiver> |
希望对你有所帮助。
此代码适用于我的 2.3.3 设备。 HTC MyTouch 4g 幻灯片。
abortBroadcast 抑制状态栏上的通知声音通知,不允许短信进入收件箱。
一些用户提到它不能在真实设备上运行,只能在模拟器上运行,但情况并非总是如此。如果优先级为 100,则在此特定设备上代码按预期工作。
你可以捕获传入的短信,但我认为你将无法阻止通知.....
如果你想删除短信,这里有一个可以提供帮助的线程......
如何以编程方式从 Android 的收件箱中删除短信?