Android 如何在我的应用程序读取广播消息后删除它?
我在我的应用程序中阅读广播短信 我想首先检查消息中是否存在特定模式。如果不存在,那么我想删除该短信,而不将其保存在收件箱文件夹中 我可以在我的应用程序中成功阅读短信,但无法删除它。代码片段如下所示Android 如何在我的应用程序读取广播消息后删除它?,android,sms,android-broadcast,Android,Sms,Android Broadcast,我在我的应用程序中阅读广播短信 我想首先检查消息中是否存在特定模式。如果不存在,那么我想删除该短信,而不将其保存在收件箱文件夹中 我可以在我的应用程序中成功阅读短信,但无法删除它。代码片段如下所示 public class SmsListener extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Telephony.Sms.Intents.SM
public class SmsListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) {
String messageBody = smsMessage.getMessageBody();
String pattern="$Ntmds";
if(messageBody.indexOf(pattern)!=-1){
Log.d("sdsd,", String.valueOf(messageBody));
}else {
//i want to delete here
// abortBroadcast(); <-- this is nnot working for me
Log.d("vb,", String.valueOf(messageBody));
}
}
}
}
}
}
公共类SmsListener扩展广播接收器{
@凌驾
公共void onReceive(上下文、意图){
if(Telephony.Sms.Intents.Sms_RECEIVED_ACTION.equals(intent.getAction())){
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.KITKAT){
for(SmsMessage SmsMessage:Telephony.Sms.Intents.getMessagesFromIntent(intent)){
字符串messageBody=smsMessage.getMessageBody();
字符串模式=“$Ntmds”;
if(messageBody.indexOf(模式)!=-1){
Log.d(“sdsd,”,String.valueOf(messageBody));
}否则{
//我想在这里删除
//abortBroadcast();您不能在棉花糖上执行此操作。它仅适用于您正在使用的Android版本的Android操作系统?我使用的是6.0(棉花糖)。您不应该为此使用普通短信-使用基于端口的短信,因此它不会出现在普通收件箱中。这意味着无法中止该短信?您有两种其他方法可以解决您的问题。请遵循谷歌的建议,在您需要执行时,如何请求用户将默认短信应用程序切换到您的应用程序您的更改(完成后,允许用户切换回原来的默认短信应用程序)。或者找到一种临时的黑客方法来执行您需要执行的操作。作为提示,有一个隐藏的API:AppOpsManager,您可以利用它来授予您的应用程序写权限(OP_write_SMS),请转到此XDA页面了解更多信息:
<receiver android:name=".SmsListener">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>