是否可以拦截来自某个号码的短信并将其指向iPhone / Android上的某个应用程序进行处理? 感谢。
答案 0 :(得分:1)
在Android中,您可以执行的操作是注册BroadcastReceiver
以通知已收到SMS,将该消息标记为已在SMS内容提供商中读取,然后从内容提供商处删除该特定消息。这将阻止任何其他应用程序在您删除邮件后能够阅读该邮件,并且通知空间中不会显示任何通知。也就是说,我不知道接收Intent的应用程序会发生什么,表明已收到消息但无法在数据库中访问它。由于一些竞争条件,这可能导致不可预测的行为。
答案 1 :(得分:1)
是。它可以在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>
答案 2 :(得分:0)
对于Android,答案是否定的。您可以实现在设备收到SMS文本消息时调用的BroadcastReceiver
,但不能阻止其他应用程序(例如内置的消息应用程序)接收它们。
答案 3 :(得分:0)
对于Android,答案是是。
android.provider.Telephony.SMS_RECEIVED
事件是有序广播,您可以调整优先级。这意味着您的应用程序将在其他人之前收到该事件。您可以取消其余广播接收器的广播。
您可以在此处找到更多信息:stackoverflow.com/can-we-delete-an-sms-in-android-before-it-reaches-the-inbox/
答案 4 :(得分:0)
在Android中,一旦在应用程序中收到SMS消息,就可以使用Intent对象将消息的详细信息传递给另一个活动/应用程序以进行进一步处理。如果需要将消息传递给自己的应用程序,请使用sendBroadcast()方法广播Intent对象。在您的活动中,您只需要使用registerReceiver()方法来监听广播。
希望它有所帮助! 李伟萌