对于一个项目,我必须在带有SIM卡的平板电脑上制作短信应用程序。我能够发送短信和接收短信,但是当我使用内容解析器访问"Content://sms/inbox"时,我的光标没有数据。有人知道是什么问题吗?
下面是我从收件箱中读取短信的代码:
private List<Sms> getSms() {
List<Sms> smsList = new ArrayList<Sms>();
Uri uri = Uri.parse("content://sms/inbox");
Cursor c= mContext.getContentResolver().query(uri, null, null ,null,null);
Log.d("stackoverflow", "Number of sms: " + c.getCount());
while(c.moveToNext()) {
Sms sms = new Sms(c.getString(c.getColumnIndexOrThrow("address")).toString(), c.getString(c.getColumnIndexOrThrow("body")).toString());
smsList.add(sms);
}
c.close();
return smsList;
}
上面代码中的Log返回0,即使我刚刚向Tablet发送了一条短信。
提前感谢!
从评论中收集的信息和您在设备上运行的测试来看,似乎没有真正的问题。你刚从一个新的,空的短信提供商开始。由于当时没有安装默认的SMS应用程序,因此没有可用的应用程序将任何传入的消息写入收件箱,这就是为什么即使收到了一些消息,查询也没有结果。看来你的应用程序将不得不处理保存传出和传入的消息。
要对SMS提供程序具有写访问权限,您的应用程序需要是设备上的默认消息传递应用程序。通常情况下,默认应用程序需要处理大量的事情,但你正在编写一个只需要处理短信的自定义应用程序,所以你可以仅仅将其"呈现"为默认功能。这个答案详细说明了您的应用程序能够被选择为默认值的最低要求。这只是把所有正确的东西都放在清单上的问题。
除此之外,您只需要在Provider上进行适当的查询和插入。您在问题中有一个示例查询,在这篇文章中可以找到一个简单的插入示例。如果你决定在将来实现默认应用程序的进一步功能,我将留下一个链接到事实上的参考,用于KitKat引入的SMS API的更改。
让你的短信应用准备好KitKat