【问题标题】:Reading SMS messages from Inbox从收件箱中读取 SMS 消息
【发布时间】:2014-04-09 19:36:45
【问题描述】:

我正在尝试从用户的收件箱中读取 SMS 消息,但我只得到号码,因为 cur.getString() 在索引为 2 之后总是返回 NULL 给我...

这是我的代码:

        TextView view = (TextView)findViewById(R.id.textView1);

      Uri uriSMSURI = Uri.parse("content://sms/inbox");
      Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,null);
      String sms = "";
      while (cur.moveToNext()) 
      {
          sms += "From :" + cur.getString(2) + " : " + cur.getString(11)+"\n";
          Log.i("MyApp", "A " + cur.getString(2) + " " + cur.getString(3));
      }

      view.setText(sms);

我查过了,cur.getString(3) 及以上,总是返回 null 给我...

我的错误是什么?

谢谢!

编辑: 感谢 simas,我看到包含消息数据的 body 字段是光标中的第 12 号字段(cur),而不是 11。因此将其从 11 更改为 12 修复了它。 谢谢西玛斯!

【问题讨论】:

  • 添加一些日志以检查空值,然后发布您的 logcat 结果

标签: java android


【解决方案1】:

试试这个:

cur.moveToFirst();
if (cur != null) {
    do {    
       sms += "From :" + cur.getString(2) + " : " + cur.getString(11)+"\n";
           Log.i("MyApp", "A " + cur.getString(2) + " " + cur.getString(3));        
    }while(cur.moveToNext());
}

【讨论】:

  • Log.i("MyApp", cur.getString(cur.getColumnIndex("person"))); 行使我的应用程序崩溃...
  • 我认为你应该添加 cur.moveToFirst();之前
  • 并非所有手机都使用相同的内容提供商存储 SMS 数据,因此请尝试查看以下结果:Log.i("COLUMNS", Arrays.toString(cur.getColumnNames()));
  • 而带有 getColumnNames 的 Arrays.toString 返回一些随机十六进制 - 字符串,例如 FDX515S - 那是字符串的地址吗?
  • 正如android开发者网站所说:返回一个字符串数组,其中包含结果集中所有列的名称,按照它们在结果中列出的顺序排列。但它必须像 [id,body,...] 你是否在你的 android 清单文件中插入了 READ_SMS 权限?
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2019-08-24
  • 1970-01-01
相关资源
最近更新 更多