与SMS会话列表相关的SGS-3错误?

时间:2012-11-25 16:37:05

标签: android sms android-contentprovider samsung-mobile

此问题已多次报告,但仍未解决。我在Samsung's developers sitein StackOverflow

中阅读了与此主题有关的所有消息/帖子

让我再说几句话来描述整个问题:

  1. 开发人员过去通过以下简单查询获取短信对话列表:

    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的某些型号中正常工作。它使用stacktrace生成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)

  4. 在世界/宇宙其他地方的所有其他设备中,它运作良好!奇怪,是吗?

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

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

3 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:1)

我也遇到了这个问题,似乎没有解决它的问题。 检查@barmaley答案,它也为我产生了同样的例外

@edit  我的朋友刚刚在他的sgs3上检查了这个,它确实有效!但他不能得到身体/地址专栏,但它是一个开始!非常奇怪的是,它不适用于我的工作。我的sgs3来自波兰分销,他来自美国......如果地区之间存在差异,这可能会比预期更糟糕

答案 2 :(得分:1)

如果仅对SMS对话感兴趣,并且希望您没有content://mms-sms/conversations?simple=true无法获得的其他SMS列,则可以尝试在ContentResolver查询中对SMS进行自己的分组。

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

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