2017-03-25 38 views
0

刪除短信成功刪除從廣播短信後之後,我不能從通知抽屜明確通知清除短信通知,通知抽屜從廣播

1)當我打開短信應用,該短信被刪除, 但在通知,顯示了味精

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> 

回答

0

後成功地從廣播

刪除短信您無法在Android 4.4+刪除短信,除非你是用戶選擇的SMS客戶端。

但還是味精是在通知抽屜可見

正確的。 Notification是由短信應用程序提出的。短信應用程序可以清除它。在Android 4.4+上,您的應用將不得不短信應用,因此您需要cancel()您自己的Notification

您可以實施a NotificationListenerService並使用它來強制清除SMS。用戶必須在設置中同意讓你監視所有用戶的通知。很少有用戶會這樣做。而NotificationListenerService僅適用於Android 4.3+。因此,您可以從中獲得任何價值的唯一Android版本是Android 4.3。

這裏是我的清單文件

請注意,一些你已經列出的權限是那些只有系統的應用程序可以持有。

+0

你不能刪除Android 4.4+, 上的短信,但我做到了,上面的代碼完全刪除短信。 我在Android 5.1和4.4兩個測試中 只是我想清除通知。 可以b。通過前面接近味精應用 只是想知道,我如何強制關閉的短信應用 像greenyfy應用做 –

+0

做了你不能在Android 4.4+刪除短信, 但上面的代碼工作正常 它成功地刪除了短信在Android 5.1和4.4兩個短消息都 我只是想清除通知該短信 當我打開短信應用程序刪除短信由Reciver 通知變得清晰,沒有短信,我刪除了Reciver 但問題是,直到即時通訊不打開短信應用程序短信是可見的,用戶可讀通知抽屜 –

+1

@SagarMakhija:你的設備不尋常。 [只有用戶選擇的SMS客戶端可以從Android 4.4開始寫信給SMS提供商](https://android-developers.googleblog.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html )。 – CommonsWare