2015-12-05 25 views
1

我讀了this blogthis doc關於Android KitKat +上的默認短信應用行爲。這兩種說法是:在Android上設置爲默認SMS應用程序時,是否需要寫入SMS提供程序?

...當且僅當一個應用程序被沒有選擇作爲默認的短信應用,該 系統自動寫入使用這種方法來短信 提供商(默認的短信應用發送的消息始終負責將其發送的消息寫入SMS提供程序)。

因此,讓我們從我的代碼中的一個地方說我需要發送短信。我用這個代碼:

SmsManager smsManager = SmsManager.getDefault(); 

     smsManager.sendMultipartTextMessage(
       phoneNumber, 
       null, 
       smsManager.divideMessage(data), 
       null, null); 

現在,當未設置爲默認的應用程序,我可以證實,短信顯示在默認的應用程序從我的應用程序發送之後。如果我是設備上的默認應用,如何插入短信?我在哪裏調用這個插入,是否有一些方法需要重載?

當接收到SMS時,在接收器類中,我是否也將SMS寫入內部SMS數據庫?又如何?

非常感謝您的幫助

+0

看看SMS彈出窗口,它已更新爲KitKat。 https://github.com/everythingandroid/android-smspopup –

回答

2

如果我是在設備的默認應用程序,我怎麼插入短信?

您可以按照您添加到ContentProvider的相同方式進行操作;通過在ContentResolver上調用insert()Telephony.Sms.Sent.CONTENT_URIContentValues對象與相關數據。

我在哪裏調用這個插入,是否有一些方法需要重載?

您不需要超載任何東西。在收到發送的PendingIntent的結果後,只需進行相應的insert()調用即可作爲示例sendMultipartTextMessage()調用中的第四個參數傳遞。根據結果​​,您可能需要插入類型爲STATUS_FAILED的消息。

並且當接收到SMS時,在接收器類中,我是否也將SMS寫入內部SMS數據庫?

我不知道你所說的內部SMS數據庫的意思,但是默認的應用程序是負責編寫所有傳入的消息提供者,你會在與上述同樣的方式做,但與Telephony.Sms.Inbox.CONTENT_URI 。如果您的應用程序擁有自己獨立的數據庫,則可以使用標準數據庫API寫入該數據庫。

+0

感謝您的回答,但還有一件事。當另一個應用程序(非默認短信應用程序)調用發送,如上所述,我的應用程序通知並負責處理,以及? –

+1

沒有。使用SmsManager發送的非默認應用程序會自動將其消息寫入提供程序。除了確保將其顯示在應用程序中之外,您無需處理該問題,如果您查詢提供程序以創建消息列表,則無論如何都會發生這種情況。 –

+0

至於mms,那些不是將intosms提供程序放在非默認應用程序中,因此從非默認應用程序發送時無法在def應用程序中顯示它們? –

相關問題