2011-10-16 168 views
1

我已經構建了一個appWidget,它在更新短信時會更新它的未讀短信計數,因爲我註冊了一個contentObserver來監控傳入短信。android AppWidget:SMS查詢適用於模擬器,但不適用於真實設備

mySMSObserver類調用下面的方法獲取特定聯繫人的未讀郵件數,其編號爲

到目前爲止,問題是下面的查詢在模擬器上工作正常,但是當我嘗試在我的Android設備上時,它總是返回0未讀消息(如Toast所示)。

私人靜態字符串updateUnreadSMS(字符串的ContactID,上下文的背景下){

ContentResolver cr=context.getContentResolver(); 
//final Uri SMS_INBOX=(Uri.parse("content://mms-sms/conversations")); 
//final Uri SMS_INBOX=(Uri.parse("content://mms/inbox")); 
final Uri SMS_INBOX=Uri.parse("content://sms/inbox"); 

Cursor c = cr.query(SMS_INBOX, null, "read = 0 AND person=?", new String[]{contactID}, null); 

// get number of unread sms messages 
int unreadMessagesCount = c.getCount(); 

Log.d("DEBUG", "UnreadSMS: "+unreadMessagesCount); 
Toast.makeText(context, "updateUnreadSMS "+unreadMessagesCount, Toast.LENGTH_LONG).show(); 

c.deactivate(); 
return String.valueOf(unreadMessagesCount); 

}

有不同查詢的需要爲不同的設備?

如何爲「content:// mms/inbox」?編寫相同的查詢,因爲「person =?」是該查詢的非法字段。

會很高興您的幫助和建議解決這個問題的:)

回答

0

直接訪問數據庫的可能不是最好的主意。由於地理位置和數據結構可能會隨着Android版本的不同而變化(它的日曆存儲從7 = 8開始)。不過,請檢查您的設備位置和數據庫結構是否相同。

對於彩信,您可能需要查看PduParser用於分析此文件夾中的MMS消息和其他類。

+0

感謝您的評論,我只是需要一些更多的說明請: *我如何檢查我的android設備位置和數據庫結構是否一樣?特別是,我如何檢查我的android設備位置和數據庫結構? *我如何間接訪問我的數據庫?特別是對於SMS數據庫 感謝先進! – GalDude33

+0

據我所知(糾正我,如果我錯了),你不能檢查存儲的位置。你需要知道哪個版本的Android存儲數據在哪裏。所以最好的方法是通過Android類來訪問數據。這裏是最大的問題。有些存儲可以通過這種方式訪問​​,有些則不行。這是Android OS不能提供所有必需的訪問權限的一大缺點。我對SMS存儲不熟悉,所以你需要在操作系統內部進行一次跳躍以找出在哪裏和什麼。 – Drejc

+0

如果你看看這個問題的評論,你會得到的感覺:http://stackoverflow.com/questions/4809874/how-to-access-the-sms-storage-on-android – Drejc

相關問題