【问题标题】:SGS-3 bug related to SMS conversations list?与 SMS 对话列表相关的 SGS-3 错误?
【发布时间】:2012-11-25 16:37:05
【问题描述】:

此问题已多次报告,但仍未解决。我在Samsung's developers site 或in StackOverflow 中阅读了所有与该主题相关的消息/线程

让我用几句话再次描述整个问题:

  1. 开发人员过去常常通过简单的查询来获取 SMS 对话列表,例如:

    Uri.parse("content://mms-sms/conversations/"); Cursor cursor = context.getApplicationContext().getContentResolver().query(uri, null, null, null, null);

    或类似的东西。关键点这里的URI地址:content://mms-sms/conversations

  2. 每个人都知道这是非官方的,而且要自己承担风险 - see proof link here

  3. 但是,关键点是一个简单的事实,该代码仅在三星 Galaxy S3 和某些型号的 Galaxy Tab 2 中无法正常工作。它使用堆栈跟踪生成 NullPointerException:

    java.lang.NullPointerException at android.os.Parcel.readException(Parcel.java:1431) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140) at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) at android.content.ContentResolver.query(ContentResolver.java:372) at android.content.ContentResolver.query(ContentResolver.java:315)

在世界其他地方/宇宙的所有其他设备中,它运行良好!很奇怪吧?

我知道这样的答案:嘿,伙计,这是你的问题,因为不能保证上述 URI 的存在/正确性,但是,有人有更有效的想法吗?

我已经通过他们的论坛向三星的开发者发布了问题。

【问题讨论】:

    标签: android sms android-contentprovider samsung-mobile


    【解决方案1】:

    最后我想出了如何克服上述问题(我不确定它是否是错误,但无论如何它看起来像一个错误)。

    可以通过此查询检索对话列表:

    Uri.parse("content://mms-sms/conversations?simple=true"); 
    Cursor cursor = context.getApplicationContext().getContentResolver().query(uri, null, null, null, null);
    

    这里的关键点是 URI content://mms-sms/conversations?simple=true。

    【讨论】:

    • 嘿@barmaley,如果你想从Uri "content://mms-sms/conversations?simple=true" 获取thread_id怎么办。你会怎么做?
    • 没关系,我猜“content://mms-sms/conversations?simple=true”的“_id”列相当于“content://mms-sms”的“thread_id”列/对话”。
    • @barmaley 您的应用是否仍可在 SG3 上运行?我正在制作一个新应用,但遇到了这个问题
    • 返回的表没有内容类型(ct_t)信息。如何确定一条消息是 SMS 还是 MMS?
    • @FeRD 作为上面提到的 KDE Con​​nect 开发人员,我想明确一点,我和任何人一样困惑。然而,今天的更多实验向我表明来自?simple=true 的数据不是很有用,除非您可以获取 _id 列并在另一个内容 URI 中查找匹配的 thread_id
    【解决方案2】:

    我也遇到过这个问题,atm好像没有解决办法。 检查了@barmaley 的答案,它也为我产生了同样的异常

    @编辑 我的朋友刚刚在他的 sgs3 上检查了这个,它有效!但他无法获得正文/地址栏,但这是一个开始!很奇怪,它适用于他而不是我的。我的 sgs3 来自波兰发行,他来自美国......如果地区之间存在差异,这可能比预期的要差

    【讨论】:

    • content://mms-sms/conversations?simple=true 产生不同的列集。例如。地址为 sn-p 等等,所以你需要改变你的代码
    • 是的,感谢//prints columns names for (int i = 0; i < cur.getColumnCount(); i++) { Log.v("column names", cur.getColumnName(i).toString()); }
    • @AdamFręśko 你最终成功了吗?我有同样的问题
    【解决方案3】:

    如果只对 SMS 对话感兴趣,并且想要添加 content://mms-sms/conversations?simple=true 没有的 SMS 列,那么您可以尝试在 ContentResolver 查询中对 SMS 进行自己的分组。

    • uri = content://sms
    • 投影 = "DISTINCT " + Inbox.THREAD_ID, Inbox.ADDRESS, Inbox.BODY, Inbox.DATE 等...
    • 选择 = Inbox.THREAD_ID + " IS NOT NULL) GROUP BY (" + Inbox.THREAD_ID
    • 排序顺序 = Inbox.DEFAULT_SORT_ORDER

    请注意,由于 ContentResolver 向它生成的数据库查询添加括号的方式,我必须在 GROUP BY 之前插入一个虚拟条件“IS NOT NULL”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-30
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多