Android 如何根据不同的设备获取sms列表
我试图获得短信列表和下面的代码在一些设备上运行良好,但在其他设备上不起作用。使用以下代码对四台设备进行详细测试 LG optimus one[android 2.2]-运行良好。SS galaxy s3[android4.0.4]-运行良好。SS galaxy s2[android 2.3.5]-不工作。SS galaxy s2[android 4.0.4]-不工作 结果似乎取决于设备,而不是android版本,因为两台android版本相同的设备[4.0.4]的显示方式不同。设备不工作的症状是c.getCount=0,即使它们有许多短信。查询不返回任何内容。为什么会这样?如何在galaxy s2中获取短信列表Android 如何根据不同的设备获取sms列表,android,sms,Android,Sms,我试图获得短信列表和下面的代码在一些设备上运行良好,但在其他设备上不起作用。使用以下代码对四台设备进行详细测试 LG optimus one[android 2.2]-运行良好。SS galaxy s3[android4.0.4]-运行良好。SS galaxy s2[android 2.3.5]-不工作。SS galaxy s2[android 4.0.4]-不工作 结果似乎取决于设备,而不是android版本,因为两台android版本相同的设备[4.0.4]的显示方式不同。设备不工作的症状是
@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();
}
content://sms/ 是这是一种隐藏方法,可能无法在所有设备中使用。在Android 4.4 KitKat设备中,您可以使用中的代码执行此操作:
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;
}
我不相信现在有一种记录在案的方法可以在所有设备上使用。为什么会这样在Android 4.4之前,SMS内容提供商没有文档记录,也不受支持。不要求任何SMS应用程序在此提供商中存储消息。我的测试表明,SMS查询在Android 4.0和2.3中有效,但在2.3中无效。这是我无法理解的。@user3288131版本不重要,它是设备,因为只有一些设备支持该ContentProvider。感谢快速回答。有什么方法可以同时在Android 4.4+和4.4-version上工作吗?@user3288131我不知道。请记住,内容提供商将在某些设备上工作,但不是所有设备上。。。但所有4.4设备都将支持上述代码。有关更多信息,请阅读。