对于一个项目,我必须在带有SIM卡的平板电脑上制作短信应用程序。我能够发送短信并接收短信,但是当我使用内容解析器来访问内容:// 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;
}
以上代码中的登录返回零,即使我刚刚向平板电脑发送了短信。
提前致谢!
答案 0 :(得分:1)
根据评论中收集的信息以及您在设备上运行的测试,似乎没有真正的问题。您刚刚开始使用新的空SMS提供程序。由于您当时没有安装默认的SMS应用程序,因此没有可用于将任何传入邮件写入收件箱的应用程序,这就是为什么该查询返回时没有结果,即使收到了一些邮件。看来你的应用程序必须处理保存传出和传入消息。
要获得对SMS提供程序的写入权限,您的应用程序将需要成为设备上的默认消息传递应用程序。通常情况下,默认应用程序需要处理大量事情,但您正在编写一个只需要处理SMS的自定义应用程序,因此您只需将其“呈现”为默认应用即可。 This answer详细说明了您的应用可以被选为默认值的最低要求。这只是在清单中拥有所有正确的东西的问题。
除此之外,您只需在Provider上进行适当的查询和插入即可。您在问题中有一个示例查询,可以在this post中找到插入的简单示例。
如果您决定在将来实施默认应用的更多功能,我会留下一个指向事实参考的链接,以获取对KitKat中引入的SMS API的更改。