2014-02-08 55 views
2

我試圖獲得短信列表,下面的代碼在某些設備上運行良好,但在其他設備中無法正常工作。使用以下代碼測試四個設備的詳細信息。如何根據各種設備獲取短信列表

LG optimus one [android 2.2] - 效果很好。 SS galaxy s3 [android4.0.4] - 效果很好。 SS銀河s2 [android 2.3.5] - 不工作。 SS galaxy s2 [android 4.0.4] - 不工作。

看來,結果取決於設備而不是android版本,因爲具有相同的android版本[4.0.4]的兩個設備顯示不同。設備無法正常工作的症狀是c.getCount()= 0,即使它們有很多短信。查詢不返回任何內容。爲什麼這些?我怎樣才能在s2中獲得sms列表?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

String smsMsgBody = null; 
String smsMsgAddress = null; 
String smsMsgDirection = null;  

Uri uri = Uri.parse("content://sms"); 
// Uri uri = Uri.parse("content://sms/inbox"); 
// Uri uri = Uri.parse("content://sms/conversations/"); 

Cursor c= getContentResolver().query(uri, null, null,null,null); 

// startManagingCursor(c); 
if (c.getCount() > 0) 
{ 
String count = Integer.toString(c.getCount()); 
while (c.moveToNext()) 
{ 
smsMsgBody = c.getString(c.getColumnIndex("body")); 
smsMsgAddress = c.getString(c.getColumnIndex("address")); 
smsMsgDirection = c.getString(c.getColumnIndex("type")); 

// Do things using above sms data 
} 
} 
c.close(); 
} 
+1

「這是爲什麼?」 - 直到Android 4.4,SMS'ContentProvider'沒有記錄並且不受支持。不需要任何短信應用程序將消息存儲在此提供程序中。 – CommonsWare

+0

我的測試顯示短信查詢在Android 4.0和2.3中可用,但不在2.3這是我無法理解的。 – user3288131

+1

@ user3288131版本並不重要,它是設備,因爲只有一些設備支持該「ContentProvider」。 – hichris123

回答

1

content://sms/not a supported content provider。這是一種隱藏的方法,可能並不適用於所有設備。在Android 4.4的奇巧設備,您可以使用代碼this answer做到這一點:

public List<String> getAllSms() { 
    List<String> lstSms = new ArrayList<String>(); 
    ContentResolver cr = mActivity.getContentResolver(); 

    Cursor c = cr.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++) { 
      lstSms.add(c.getString(0)); 
      c.moveToNext(); 
     } 
    } 
    else { 
     throw new RuntimeException("You have no SMS in Inbox"); 
    } 
    c.close(); 

    return lstSms; 
} 

我不相信有一個記錄方法,將整個所有設備的工作現在。

+0

感謝您的快速回答。有沒有什麼辦法可以同時適用於Android 4.4+和4.4-版本? – user3288131

+0

@ user3288131不是我所知道的。請記住,內容提供商將在一些設備上工作,但不是全部......但所有4.4設備都將支持上述代碼。欲瞭解更多信息,請閱讀[此問題](http://stackoverflow.com/questions/848728/how-can-i-read-sms-messages-from-the-inbox-programmatically-in-android?lq=1) 。 – hichris123