2016-09-23 117 views
1

對於一個項目,我必須在帶有SIM卡的平板電腦上開發短信應用程序。我可以發送短信並接收短信,但是當我使用Content Resolver訪問「content:// sms/inbox」時,我的光標沒有數據。任何人都知道可能是什麼問題?Android平板電腦上的空白短信收件箱

這裏是我的代碼從收件箱中讀取短信:

private List<Sms> getSms() { 
    List<Sms> smsList = new ArrayList<Sms>(); 
    Uri uri = Uri.parse("content://sms/inbox"); 
    Cursor c= mContext.getContentResolver().query(uri, null, null ,null,null); 
    Log.d("stackoverflow", "Number of sms: " + c.getCount()); 
    while(c.moveToNext()) { 
     Sms sms = new Sms(c.getString(c.getColumnIndexOrThrow("address")).toString(), c.getString(c.getColumnIndexOrThrow("body")).toString()); 
     smsList.add(sms); 
    } 
    c.close(); 
    return smsList; 
} 

在日誌中上面的代碼返回零,甚至當我剛剛發送短信到平板電腦。

提前致謝!

回答

1

從評論中收集的信息以及您在設備上運行的測試中,似乎沒有什麼問題。您剛剛開始使用新的空白SMS提供程序。由於您當時沒有安裝默認的SMS應用程序,因此沒有應用程序可用於將任何傳入消息寫入收件箱,這就是爲什麼即使在收到某些消息後也無法返回結果的原因。看來你的應用程序將不得不處理保存傳出和傳入的消息。

要擁有對SMS提供者的寫入權限,您的應用將需要成爲設備上的默認消息應用。通常情況下,一個默認的應用程序需要處理一大堆事情,但是您正在編寫一個只需處理SMS的自定義應用程序,因此您只需將其「呈現」爲默認應用程序即可脫身。 This answer詳細說明您的應用程序能夠被選爲默認設置的最低要求。這只是在清單中擁有所有正確的東西而已。

除此之外,您只需要在提供程序上進行適當的查詢和插入即可。您在問題中有一個示例查詢,插入的簡單示例可在this post中找到。

如果您決定在未來實現默認應用程序的其他功能,我將留下指向事實上參考的鏈接,以便對KitKat中引入的SMS API進行更改。

Getting Your SMS Apps Ready for KitKat