我试图获取短信列表,下面的代码在某些设备上运行良好,但在其他设备中无效。使用以下代码使用四个设备测试详细信息
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();
}
答案 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;
}
我不相信有一种文档化的方法可以在所有设备上使用。