Android 平板电脑上的空短信收件箱

Android empty sms inbox on Tablet

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

上面代码中的登录 returns 零,即使我刚刚向平板电脑发送了一条短信。

提前致谢!

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

要拥有对 SMS Provider 的写入权限,您的应用需要成为设备上的默认消息传递应用。通常,默认应用程序需要处理一大堆事情,但您正在编写一个只需要处理 SMS 的自定义应用程序,因此您只需 "presenting" 它具有默认功能即可。 详细说明了您的应用能够被选为默认应用的最低要求。这只是在清单中包含所有正确内容的问题。

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

中找到一个简单的插入示例

如果您将来决定实现默认应用程序的更多功能,我将 link 留给 事实上的 参考以更改短信 API 在 KitKat 中引入。

Getting Your SMS Apps Ready for KitKat