【发布时间】:2017-03-25 22:48:46
【问题描述】:
从广播中成功删除短信后,我无法从通知抽屉中清除通知
1)当我打开短信应用程序时,短信被删除, 但在通知中,显示带有 msg 的短信
2)当我点击短信通知时,它会打开“带有新空白短信的短信应用”
我尝试通过以下方式清除通知抽屉: (1)
NotificationManager notificationManager = (NotificationManager) supercontext.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();
我尝试通过以下方式清除通知抽屉: (2)
Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
closeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
supercontext.startActivity(closeIntent);
但在通知抽屉中仍然可以看到消息 这是我在 Broadcast.java 中的代码:
@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());
}
}
}
这是我的清单文件:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERNET" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SET_ALWAYS_FINISH" />
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
<uses-permission android:name="android.permission.BROADCAST_SMS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.sagarmakhija1994.Framework.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="com.sagarmakhija1994.Framework.MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.service.notification.NotificationListenerService" />
<action android:name="android.intent.ACTION_CLOSE_SYSTEM_DIALOGS" />
</intent-filter>
</receiver>
</application>
【问题讨论】:
标签: android notifications sms broadcast