如何根据各种设备获取短信列表

时间:2014-02-08 21:47:25

标签: 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中获得短信列表?

@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 个答案:

答案 0 :(得分:1)

content://sms/not a supported content provider。这是一种隐藏方法,可能并非在所有设备中都可用。在Android 4.4 KitKat设备中,您可以使用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;
}

我不相信有一种文档化的方法可以在所有设备上使用。