我想在发送之前阅读用户在我的应用程序中发送的短信。有没有办法做到这一点?
问问题
2939 次
3 回答
2
这是不可能的。任何应用程序都可以SmsManager
用来发送 SMS,并且此类消息不能被截获,除非可能通过自定义固件。
于 2012-05-03T15:14:12.730 回答
0
您无法阻止发送的短信。您只能在发送后才能了解它。当短信到达已发送框时,您可以通过为短信注册内容观察者来做到这一点。
于 2012-05-03T15:17:48.970 回答
0
如果需要,您可以拦截传入的消息。
这是一个 SMS 拦截器的示例,如果它包含一些自定义定义的数据,它会“取消”SMS:
为了让您的应用程序在消息显示在手机中之前接收消息,您必须在清单中定义一个具有高优先级的接收器。例子:
<receiver android:name=".SMSReceiver">
<intent-filter android:priority="9999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
然后,创建接收器:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SMSReceiver extends BroadcastReceiver{
private static final String CRITICAL_MESSAGE = "critical";
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
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]);
if (msgs[i].getMessageBody().toString().equals(CRITICAL_MESSAGE)){
str = "Critical msg from " + msgs[i].getOriginatingAddress() + " !";
Toast.makeText(context, str, Toast.LENGTH_LONG).show();
abortBroadcast();
}
}
}
}
}
如果收到关键字符串,上述接收器将取消 SMS(中止广播) 。
于 2012-05-03T15:21:06.350 回答