2013-06-25 56 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