2013-06-25 88 views
0

當短信發送給我。在BroatcastReceiver的的onReceive,我調用方法readNewSMS():不會收到新短信

private MySMS readNewSMS(String phoneNumber) { 
    MySMS sms = new MySMS(); 

    Uri uri = Uri.parse("content://sms/inbox"); 
    Cursor cursor = getSherlockActivity().managedQuery(uri, null, 
      null, null, null); 
    cursor.moveToFirst(); 

     sms.setNumber(cursor.getString(
       cursor.getColumnIndexOrThrow("address")).toString()); 
     sms.setId(cursor.getString(
       cursor.getColumnIndexOrThrow("_id")).toString()); 
     sms.setThread_id(cursor.getString(cursor 
       .getColumnIndexOrThrow("thread_id"))); 
     sms.setBody(cursor.getString(
       cursor.getColumnIndexOrThrow("body")).toString()); 
     sms.setTime(cursor.getString(
       cursor.getColumnIndexOrThrow("date")).toString()); 
     sms.setType(cursor.getString(
       cursor.getColumnIndexOrThrow("type")).toString()); 

    return sms; 
} 

但它返回的新短信的短信以前,沒有新的短信。如何解決這個錯誤?

回答

0

這樣做,很可能是你的BroadcastReceiver註冊到android.provider.Telephony.SMS_RECEIVED行動,並從意圖SMS消息最簡單的方法獲得:

protected SmsMessage[] extractSmsMessagesFromIntent(Intent p_intent) { 
    //---get the SMS message passed in--- 
    Bundle bundle = p_intent.getExtras();   
    SmsMessage[] msgs = null; 
    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]); 
     } 
    } 
    return msgs; 
} 
+0

這事我知道。但我需要**它的ID **以便我可以從我的列表短信中刪除它。 – Ken

+0

在這種情況下,廣播操作不是您要查找的內容。按照此問題中的描述嘗試使用ContentObserver進行SMS:http://stackoverflow.com/questions/11281533/contentobserver-used-for-sms – Muzikant