2012-09-14 64 views
0

我使用此代碼從特定的電話號碼獲取SMS消息,然後打開我的應用程序。如何從特定號碼讀取短信並以編程方式從收件箱中刪除

它工作正常,但它不會從收件箱從特定電話號碼獲取短信後刪除短信。

我使用模擬器進行測試,請幫告訴我什麼是在代碼中的錯誤? 如何刪除特定號碼的短信?

public class SmsReceiver extends BroadcastReceiver { 

    String specificPhoneNumber = "15555215554"; 

    public void onReceive(Context context, Intent intent) 
    { 
      //---get the SMS message passed in--- 
      Bundle bundle = intent.getExtras();   
      SmsMessage[] msgs = null; 
      String str = ""; 

      if (bundle != null) 
      {   
       //---retrieve the SMS message received--- 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       msgs = new SmsMessage[pdus.length];    
       for (int i=0; i<msgs.length; i++){ 
        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
        String phNum = msgs[i].getOriginatingAddress(); 
        str += msgs[i].getMessageBody().toString(); 
      if (specificPhoneNumber.equals(phNum)) 

      { 
       Uri uri = Uri.parse("content://sms/inbox"); 

       ContentResolver contentResolver = context.getContentResolver(); 

       String where = "address="+phNum; 
       Cursor cursor = contentResolver.query(uri, new String[] { "_id", "thread_id"}, where, null, 
            null); 

       while (cursor.moveToNext()) { 

        long thread_id = cursor.getLong(1); 
        where = "thread_id="+thread_id; 
        Uri thread = Uri.parse("content://sms/inbox"); 
        context.getContentResolver().delete(thread, where, null); 

       } 
         Intent l = new Intent(context,AgAppMenu.class);     
         l.putExtra("msg",str);     
         l.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         context.startActivity(l); 
        } 
       } 
      } 
    } 
} 
+0

你找到了解決辦法? –

回答

0

你可以試試下面的變化 -

Uri uri = Uri.parse("content://sms/inbox"); 

用於查詢 -

String where = "address="+phNum; 
Cursor cursor = contentResolver.query(uri, new String[] { "_id", "thread_id"}, where, null, 
        null); 

線程ID將是第二個元素 -

long thread_id = cursor.getLong(1); 
where = "thread_id="+thread_id; 
Uri thread = Uri.parse("content://sms/inbox"); 
context.getContentResolver().delete(thread, where, null); 
+0

等待2分鐘生病檢查 –

+0

其不工作也SMS通知欄顯示我如何刪除它通知欄顯示惡意短信? –

+0

我起訴這個代碼在manifiest <接收機機器人: 「SmsReceiver」 名稱=機器人:啓用= 「真」> <意圖濾波器機器人:優先= 「1000」> <操作機器人:名稱= 「 android.provider.Telephony.SMS_RECEIVED」 /> 一次 –

1

只是不讓來自特定號碼的消息傳遞到收件箱。爲了實現這一目標做以下事情:

  1. 設置高優先級的SmsReceiver

    <receiver android:name="SmsReceiver"> 
        <intent-filter android:priority="999"> 
         <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
        </intent-filter> 
    </receiver> 
    
  2. 使用abortBroadcast()以防止傳遞到收件箱中的具體消息。

+0

不錯,但在Android 6.0後無法工作我不明白爲什麼,但Android不會允許它了 – JamisonMan111

+0

自從android 4.4開始,你就無法工作了:你的應用程序必須是默認的短信處理程序才能獲得對消息的這種控制。 –

相關問題