我正在使用下面的代碼從短信中檢索郵件。如何僅使用Telephony.Sms檢索每個對話的最後一條消息,包括鎖定的消息?
private List<String> getEveryLastMessages(){
List<String> listSms = new ArrayList<String>();
ContentResolver contentResolver = getActivity().getContentResolver();
Cursor c = contentResolver.query(Telephony.Sms.Inbox.CONTENT_URI, // Official CONTENT_URI from docs
new String[] { Telephony.Sms.Inbox.BODY }, // Select body text
null,
null,
Telephony.Sms.Inbox.DEFAULT_SORT_ORDER); // Default sort order
int totalSMS = c.getCount();
if (c.moveToFirst()) {
for (int i = 0; i < totalSMS; i++) {
listSms.add(c.getString(0));
listSms.add("\n");
c.moveToNext();
}
} else {
//Do something, no messages
}
c.close();
return listSms;
}
我的問題是所有的郵件被檢索,除了鎖定的消息。
我試圖實現的是隻檢索 每個對話的最後一條消息,包括鎖定消息並將其填充到我的recyclerview adapater中以將其顯示爲收件箱。
嗯,這似乎不是標準的行爲。你確定鎖定的信息是收到的信息嗎?也就是說,你確定它在收件箱中嗎?你正在測試哪個Android版本?如果這是一個實際的設備,具體是什麼?另外,你聲明你想要「每個對話的最後一條消息」。如果最後一條消息是發送消息怎麼辦?根據你的需要,[這篇文章](https://stackoverflow.com/q/42068940)可能會有所幫助。 –
是的,鎖定的消息是收到的消息。不知道鎖定的消息是否在收件箱中,但Android的默認消息傳遞程序在列表中,它只是鎖定。我目前正在Android棉花糖上測試它,是的,我使用的是一款實際的設備,型號爲INFINIX HOT S X521。只要它是每個對話的最後一個內容,是否發送最後一條消息,發送失敗,草稿,鎖定等都無關緊要。謝謝,我會檢查這個帖子。 – Polar
好的,我只是在問收件箱/收件箱,因爲這就是你在你的代碼段中查詢的所有內容 - 「Telephony.Sms.Inbox.CONTENT_URI」。 Anyhoo,從棉花糖開始,非默認應用程序只能訪問SMS表的受限視圖,並且只能獲取_inbox_和_sent_消息,所以除非您的應用程序是默認消息應用程序,否則不會獲取_failed_或_draft_消息。然而,_locked_與這些不同,不應該考慮到這種限制的觀點,至少在標準的API中。不過,OEM可能會改變這一切。 –