【发布时间】:2010-08-22 16:40:33
【问题描述】:
是否有可能截获来自某个号码的短信并将其定向到 iPhone/Android 上的某个应用程序中进行处理? 谢谢。
【问题讨论】:
标签: iphone android sms intercept
是否有可能截获来自某个号码的短信并将其定向到 iPhone/Android 上的某个应用程序中进行处理? 谢谢。
【问题讨论】:
标签: iphone android sms intercept
在 Android 中,您可以注册一个 BroadcastReceiver 以收到收到 SMS 的通知,在 SMS 内容提供程序中将消息标记为已读,然后从内容提供程序中删除该特定消息。这将阻止任何其他应用程序在您删除该消息后能够阅读该消息,并且通知空间中不会显示任何通知。也就是说,我不知道收到 Intent 的应用程序会发生什么,表明已收到一条消息,但随后无法在数据库中访问它。由于许多竞争条件,这可能会导致不可预知的行为。
【讨论】:
是的。在Android中是可能的。我正在开发的应用程序中执行此操作。 你需要做的是:
public class SMSService extends BroadcastReceiver {
public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private String phoneNumber;
private String sms;
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null) {
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]);
// get sms message
sms = msgs[i].getMessageBody();
// get phone number
phoneNumber = msgs[i].getOriginatingAddress();
if (phoneNumber.equals("Some other phone number")){
// the sms will not reach normal sms app
abortBroadcast();
Thread thread = new Thread(null,
doBackgroundThreadProcessing, "Background");
thread.start();
}
}
}
}
}
private Runnable doBackgroundThreadProcessing = new Runnable() {
// do whatever you want
};
重要提示: 在清单文件中,您必须使用高数字定义 SMS 优先级。我相信最大值是 100。
<!-- SMS Service -->
<service android:name=".SMSService" />
<receiver android:name=".SMSService">
<intent-filter android:priority="100">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
【讨论】:
对于 Android,答案是否定的。您可以实现一个BroadcastReceiver,只要设备接收到 SMS 文本消息就会调用它,但不能阻止其他应用程序(例如内置消息传递应用程序)也接收它们。
【讨论】:
对于 Android,答案是是。
android.provider.Telephony.SMS_RECEIVED 事件是有序广播,您可以调整优先级。这意味着您的应用程序将在其他人之前收到该事件。您可以取消其余广播接收器的广播。
您可以在这里找到更多信息:stackoverflow.com/can-we-delete-an-sms-in-android-before-it-reaches-the-inbox/
【讨论】:
在 Android 中,一旦您在应用程序中收到 SMS 消息,您就可以使用 Intent 对象将消息的详细信息传递给另一个活动/应用程序以进行进一步处理。如果需要将消息传递给自己的应用程序,请使用 sendBroadcast() 方法广播 Intent 对象。在您的活动中,您只需要使用 registerReceiver() 方法来收听广播。
希望对您有所帮助! 李伟明
【讨论】: