如何在 Android 上分析传入的短信?
Posted
技术标签:
【中文标题】如何在 Android 上分析传入的短信?【英文标题】:How to analyze incoming SMS on Android? 【发布时间】:2011-06-05 23:41:35 【问题描述】:我如何在 android 中进行编码,以便我的应用程序可以在 SMS 实际发出通知告知用户有新 SMS 之前分析传入的 SMS 并可能阻止它或执行某些操作(可能移动到不同的 SMS 文件夹)?我会针对 Android 2.1 及更高版本。
我想分析传入的 SMS 是否有用户指定的垃圾邮件词,如果发现我想删除/标记为已读/将消息移动到不同的文件夹。
【问题讨论】:
【参考方案1】:我使用这段代码,作为广播接收器:
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 += "\n";
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),否则短信将首先进入收件箱并收到警报通知。
<receiver android:name=".SmsReceiver">
<intent-filter android:priority="100">
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
希望对你有帮助。
【讨论】:
【参考方案2】:您可以捕获传入的短信,但我认为您将无法阻止通知..... 如果你想删除短信,这里有一个可以提供帮助的线程......How to delete an SMS from the inbox in Android programmatically?
【讨论】:
好吧,如果我的应用程序已经处理了传入的 SMS,我需要 Android 不显示默认的“新消息”通知。所以这是获得最佳用户体验的重要要求:( 嗯,*** 上有很多线程会告诉你,如果不使用你自己的隐藏扩展类是不可能的......但是你也想等待其他人的回复。 ....... 现在中止广播();方法可用于限制传入消息进入收件箱。【参考方案3】:此代码适用于我的 2.3.3 设备。 HTC MyTouch 4g 幻灯片。 abortBroadcast 抑制通知声音 + 状态栏上的通知 + 不允许 SMS 进入收件箱。 一些用户提到它不能在真实设备上运行,只能在模拟器上运行,但情况并非总是如此。如果优先级为 100,则在此特定设备上代码按预期工作。
【讨论】:
以上是关于如何在 Android 上分析传入的短信?的主要内容,如果未能解决你的问题,请参考以下文章