2016-03-01 60 views
0

我在我的应用程序中读取广播短信。如何通过我的应用程序阅读后删除广播消息?

我想先检查该消息中是否存在特定模式。如果不存在,那么我想删除该短信而不将其保存在收件箱文件夹中。

我能够在我的应用程序中成功读取短信,但无法删除它。代码片段如下。

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)); 
       } 
      } 
     } 
    } 
} 
} 

AndroidManifest.xml中

<receiver android:name=".SmsListener"> 
     <intent-filter android:priority="2147483647"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

我尝试了很多,但没有得到任何成功。我用abortBroadcast()但它也不适合我。请帮帮我。

+0

您正在使用哪个android版本? –

+0

我用了6.0(棉花糖)。 –

+0

你不应该使用普通的短信作为基于此端口的短信,所以它从来没有在一般的收件箱中看到。 –

回答

0

你不能在棉花糖上做。它仅适用于Android操作系统< = 4.3

随着Android 4.4 KitKat(API级别19)的发布,阻止SMS消息并阻止它传递到默认SMS应用程序的选项已被删除。非默认短信应用程序可能会在收到短信时观察到短信,但任何中止广播的尝试都将被Android 4.4+忽略。

如果您有一个依赖于中止SMS消息广播的现有应用程序,那么您可能需要考虑当用户升级到Android 4.4+时,这种行为变化的影响。

http://android-developers.blogspot.co.uk/2013/10/getting-your-sms-apps-ready-for-kitkat.html

+0

这意味着无法中止该短信? –

+0

不是Android 4.4 –

+0

您有两种其他方式可以解决您的问题 请遵循Google的建议,了解如何在您需要执行更改时请求用户将默认SMS应用程序切换到您的应用程序(并且一旦您完成此操作,允许用户切换回原始的默认短信应用程序)。 或找一个临时的方法来做你需要做的事情。作为提示,有一个隐藏的API:AppOpsManager,您可能会利用它来为您的应用程序提供写入权限(OP_WRITE_SMS),然后转到此XDA页面以了解更多信息: –