Android 读取 SMS 收件箱 returns 某些字段为空和零

Android read SMS inbox returns null and zeros for some fields

我想阅读 SMS 收件箱,该应用程序能够获取消息,但 returns 正文部分出现一些意外结果。以下是不需要的输出的屏幕截图。 + 生成它的代码。

//function to read the SMS inbox
    public void fetchSMS() {
        Uri uriSMSUri = Uri.parse("content://sms/inbox");
        Cursor c = getContentResolver().query(uriSMSUri, null, null, null, null);
        String sms = "";

        while (c.moveToNext()){
            sms += "From :" + c.getString(2) + " : " + c.getString(11)+"\n";
        }
        txtViewSMS.setText(sms);
    }

输出截图

请协助

您似乎为 "body" 列设置了错误的索引。您应该避免使用 hard-coded 索引,而是使用 Cursor#getColumnIndex() 方法。例如:

sms += "From :" + c.getString(c.getColumnIndex("address")) +
    " : " + c.getString(c.getColumnIndex("body")) + "\n";

此外,由于您正在拉取整个收件箱,它可能会变得相当大,这将有助于稍微优化您的方法。

public void fetchSMS() {
    final Uri uriSMSUri = Uri.parse("content://sms/inbox");
    final Cursor c = getContentResolver().query(uriSMSUri, null, null, null, null);

    if (c != null && c.moveToFirst()) {
        final StringBuilder sb = new StringBuilder();
        final int addressIndex = c.getColumnIndex("address");
        final int bodyIndex = c.getColumnIndex("body");

        do {
            sb.append("From :")
                .append(c.getString(addressIndex))
                .append(" : ")
                .append(c.getString(bodyIndex))
                .append("\n");
        } while (c.moveToNext());

        txtViewSMS.setText(sb.toString());
    }
}