从广播中删除短信后,从通知抽屉中清除短信通知

时间:2017-03-25 22:48:46

标签: android notifications sms broadcast

成功从广播中删除短信后,我无法清除通知抽屉中的通知

1)当我打开短信应用程序时,该短信被删除,   但在通知中,显示带有msg的短信

2)当我点击短信通知时,它会打开带有新空白短信的短信应用程序'

我试图通过以下方式清除通知抽屉: (1)

done

我试图通过以下方式清除通知抽屉: (2)

NotificationManager notificationManager = (NotificationManager) supercontext.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();

但仍然可以在Notification Drawer中看到msg 这是我在Broadcast.java中的代码:

Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
closeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
supercontext.startActivity(closeIntent);

}

这是我的清单文件:

@Override
public void onReceive(Context context, Intent intent) {
    final Bundle bundle = intent.getExtras();
    storageReference = FirebaseStorage.getInstance().getReference();
    supercontext = context;
    try {
        if (bundle != null) {
            final Object[] pdusObj = (Object[]) bundle.get("pdus");
            for (int i = 0; i < pdusObj.length; i++) {
                SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                String phoneNumber = currentMessage.getDisplayOriginatingAddress();
                senderNum = phoneNumber;
                message = currentMessage.getDisplayMessageBody();
                deleteSMSHandler()
           }

public void deleteSMSHandler() {
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            try {
                deleteSMS(supercontext, message, senderNum);
            } catch (Exception e) {
            }
        }
    }, 2000);
}

public void deleteSMS(Context context, String message, String number) {
    try {
        Uri uriSms = Uri.parse("content://sms/inbox");
        Cursor c = context.getContentResolver().query(uriSms,
                new String[]{"_id", "thread_id", "address",
                        "person", "date", "body"}, null, null, null);
        if (c != null && c.moveToFirst()) {
            do {
                long id = c.getLong(0);
                long threadId = c.getLong(1);
                String where = "address=" + number;
                where = "thread_id=" + threadId;
                String address = c.getString(2);
                String body = c.getString(5);
                if (message.equals(body) && address.equals(number)) {
                    context.getContentResolver().delete(Uri.parse("content://sms/" + id), where, null);

                    NotificationManager notificationManager = (NotificationManager) supercontext.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
                    notificationManager.cancelAll();

                    Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
                    closeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    supercontext.startActivity(closeIntent);
                }
            } while (c.moveToNext());
        }

    } catch (Exception e) {
        Log.i("Delete MSG Error", "" + e);
        String x = e + "";
        //mLogger.logError("Could not delete SMS from inbox: " + e.getMessage());
    }
}

1 个答案:

答案 0 :(得分:0)

  

成功删除广播中的短信

除非您是用户选择的短信客户端,否则您无法删除Android 4.4及以上的短信。

  

但仍然可以在通知抽屉中看到消息

正确。 SMS应用程序引发了Notification。 SMS应用程序可以清除它。在Android 4.4及更高版本中,您的应用必须成为短信应用,因此您cancel()拥有自己的Notification

您可以实施a NotificationListenerService并使用它来强行清除短信。用户必须在“设置”中同意让您监视所有用户的通知。很少有用户会这样做。 NotificationListenerService仅适用于Android 4.3及更高版本。因此,您可以从中获得任何价值的唯一Android版本是Android 4.3。

  

这是我的清单文件

请注意,您列出的一些权限是系统应用只能保留的权限。