成功从广播中删除短信后,我无法清除通知抽屉中的通知
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());
}
}
答案 0 :(得分:0)
成功删除广播中的短信
除非您是用户选择的短信客户端,否则您无法删除Android 4.4及以上的短信。
但仍然可以在通知抽屉中看到消息
正确。 SMS应用程序引发了Notification
。 SMS应用程序可以清除它。在Android 4.4及更高版本中,您的应用必须成为短信应用,因此您cancel()
拥有自己的Notification
。
您可以实施a NotificationListenerService
并使用它来强行清除短信。用户必须在“设置”中同意让您监视所有用户的通知。很少有用户会这样做。 NotificationListenerService
仅适用于Android 4.3及更高版本。因此,您可以从中获得任何价值的唯一Android版本是Android 4.3。
这是我的清单文件
请注意,您列出的一些权限是系统应用只能保留的权限。