Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何根据不同的设备获取sms列表_Android_Sms - Fatal编程技术网

Android 如何根据不同的设备获取sms列表

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]的显示方式不同。设备不工作的症状是

我试图获得短信列表和下面的代码在一些设备上运行良好,但在其他设备上不起作用。使用以下代码对四台设备进行详细测试

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中获取短信列表

@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设备都将支持上述代码。有关更多信息,请阅读。