平板电脑上的Android空sms收件箱

时间:2016-09-23 07:59:56

标签: android sms tablet inbox

对于一个项目,我必须在带有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;
}

以上代码中的登录返回零,即使我刚刚向平板电脑发送了短信。

提前致谢!

1 个答案:

答案 0 :(得分:1)

根据评论中收集的信息以及您在设备上运行的测试,似乎没有真正的问题。您刚刚开始使用新的空SMS提供程序。由于您当时没有安装默认的SMS应用程序,因此没有可用于将任何传入邮件写入收件箱的应用程序,这就是为什么该查询返回时没有结果,即使收到了一些邮件。看来你的应用程序必须处理保存传出和传入消息。

要获得对SMS提供程序的写入权限,您的应用程序将需要成为设备上的默认消息传递应用程序。通常情况下,默认应用程序需要处理大量事情,但您正在编写一个只需要处理SMS的自定义应用程序,因此您只需将其“呈现”为默认应用即可。 This answer详细说明了您的应用可以被选为默认值的最低要求。这只是在清单中拥有所有正确的东西的问题。

除此之外,您只需在Provider上进行适当的查询和插入即可。您在问题中有一个示例查询,可以在this post中找到插入的简单示例。

如果您决定在将来实施默认应用的更多功能,我会留下一个指向事实参考的链接,以获取对KitKat中引入的SMS API的更改。

Getting Your SMS Apps Ready for KitKat