2014-05-07 42 views
1

我想建立自己的短信應用程序(只是爲了學習的目的)如何工作。現在,當我收到短信我保存它是這樣的:集團短信從相同的號碼

SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 
String message = currentMessage.getDisplayMessageBody(); 
long time_rcv = currentMessage.getTimestampMillis(); 

ContentValues smsValues = new ContentValues(); 
smsValues.put("address", phoneNumber); 
smsValues.put("body", message); 
smsValues.put("date_sent", time_rcv); 
context.getContentResolver().insert(BlacklistConstants.smsInboxUri,smsValues); 

這個工程除了當我想要顯示的消息罰款:

來自同一號碼的人是分開顯示。

當我找回這樣的短信:

Uri uri = Uri.parse(String.valueOf(BlacklistConstants.smsConversations)); 
Cursor c = getActivity().getContentResolver().query(uri, null, null, null, null); 

我得到的輸出:

msg count: 1 
thread_id: 0 
Snippet: 2 

msg count: 1 
thread_id: 0 
Snippet: 2 

msg count: 1 
thread_id: 0 
Snippet: 2 

msg count: 1 
thread_id: 0 
Snippet: 2 

消息,其中這樣的:

從100 從11 從12 從12

所以實際上我應該得到一個有2條消息。

有人可以指出我如何解決這個問題嗎?

編輯:

這是我得到的短信的。該displayConversations只是爲錯過:

// Fills the List with Smss 
    private void fillSmsList() { 
    smsList = new ArrayList<SMSData>(); 

    Uri uri = Uri.parse(String.valueOf(BlacklistConstants.smsInboxUri)); 
    Cursor c = getActivity().getContentResolver().query(uri, null, null, null, null); 

    if (c.moveToFirst()) { 
     for (int i = 0; i < c.getCount(); i++) { 
      SMSData sms = new SMSData(); 
      sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString()); 
      sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString()); 
      sms.setId(c.getString(c.getColumnIndexOrThrow("_id")).toString()); 
      sms.setTimeStampReceived(c.getString(c.getColumnIndexOrThrow("date_sent")).toString()); 
      smsList.add(sms); 
      c.moveToNext(); 
     } 
    } 
    c.close(); 
} 

private void displaySmsConversations() { 
    Log.d(TAG,"DisplaySmsConverstations"); 
    Uri uri = Uri.parse(String.valueOf(BlacklistConstants.smsConversations)); 
    Cursor c = getActivity().getContentResolver().query(uri, null, null, null, null); 

    if (c.moveToFirst()) { 
     for (int i = 0; i < c.getCount(); i++) { 
      Log.d(TAG,"msg count: " + c.getColumnIndexOrThrow("msg_count")); 
      Log.d(TAG,"thread_id: " + c.getColumnIndexOrThrow("thread_id")); 
      Log.d(TAG,"Snippet: " + c.getColumnIndexOrThrow("snippet")); 
      c.moveToNext(); 
     } 
    } 
    c.close(); 
} 

回答

1

你應該BroadcastReceiver#onReceive方法,從多消息串連的消息,像這樣:

Object[] pdus = (Object[]) bundle.get("pdus"); 
final SmsMessage[] messages = new SmsMessage[pdus.length]; 
for (int i = 0; i < pdus.length; i++) { 
    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
} 

if (messages.length < 0) { 
    return; 
} 

SmsMessage sms = messages[0]; 
String body = ""; 
String sender = sms.getOriginatingAddress().toString(); 

try { 
    if (messages.length == 1 || sms.isReplace()) { 
     body = sms.getDisplayMessageBody(); 
    } else { 
     StringBuilder bodyText = new StringBuilder(); 
     for (int i = 0; i < messages.length; i++) { 
      bodyText.append(messages[i].getMessageBody()); 
     } 
     body = bodyText.toString(); 
    } 
} catch (Exception e) { 

} 

ContentValues smsValues = new ContentValues(); 
smsValues.put("address", sender); 
smsValues.put("body", body); 
smsValues.put("date_sent", time_rcv); 
context.getContentResolver().insert(BlacklistConstants.smsInboxUri,smsValues); 
+0

然後,我仍然看到消息爲開。我需要編輯我的查詢代碼才能獲取消息嗎?我不明白爲什麼你需要這個數組,如果你總是說現在的信息是0? – user1007522

+0

@ user1007522插入到'BlacklistConstants.smsInboxUri'並從'BlacklistConstants.smsConversations'讀取正確嗎?我不確定。 – erakitin

+0

我編輯了我的問題。在那裏你可以看到我如何填寫我的名單。我從收件箱中閱讀。但是我認爲,如果我已經有了一個帶有相同數字的短信對象,然後附加到它,它不適合檢查那裏。分辯? – user1007522