2009-11-18 75 views
7

我知道短信內容提供商不屬於公共API(至少沒有記錄),但如果我理解正確,只要您知道如何使用,仍然可以使用許多短信功能API(?)。Android短信API

E.g這是非常簡單的插入短信到您的收件箱:

ContentValues values = new ContentValues(); 
values.put("address", "+457014921911"); 
contentResolver.insert(Uri.parse("content://sms"), values); 

不幸的是這不會觸發標準的「新短信在你的收件箱」通知。可以手動觸發嗎?

編輯:AFAIK Android中的「標準郵件應用程序(消息傳遞)」正在使用android.permission.RECEIVE_SMS權限偵聽傳入的SMS。然後,當一個新的SMS到達時,狀態欄通知將被插入一個「特殊」通知ID。 因此,我的問題(上述)的一個解決方案可能是找到併發送正確的廣播意圖;像「新的短信已到達」的意思。

編輯:從Android市場下載第三方消息應用程序(chompsms)。此應用程序更好地滿足了我的需求。當我執行上面的代碼時,通知新短信並顯示「標準狀態欄通知」。所以我會說標準的Android消息應用程序沒有正確檢測到短信?或者我錯了?

回答

6

不幸的是負責這些通知的代碼隱藏在messaging application。該類MessagingNotification有一個static方法updateAllNotifications,你可以調用使用PathClassLoader與反思:

PathClassLoader c = new PathClassLoader("/system/app/Mms.apk", getClassLoader()); 
Class.forName("com.android.mms.util.ContactInfoCache", true, c) 
    .getMethod("init", Context.class).invoke(null, context); 
Class.forName("com.android.mms.transaction.MessagingNotification", true, c) 
    .getMethod("updateAllNotifications", Context.class).invoke(null, context); 

This顯然是一個very bad idea有以下幾個原因,但我想不出另一種方式去做你所描述的。

0

也許你應該更換

content://sms 

content://sms/inbox 
+2

沒有區別;短信出現在收件箱中。但仍然沒有好的短信通知:) - – Schildmeijer 2009-11-18 10:17:34