0

我正在尝试在 Android 上阅读 SMS/MMS,并且我遵循了答案,在编写代码并尝试在三星设备上的 Android OS 6.0.1 上运行它时,出现以下异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
                      at android.os.Parcel.readException(Parcel.java:1626)
                      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
                      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
                      at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
                      at android.content.ContentResolver.query(ContentResolver.java:502)
                      at android.content.ContentResolver.query(ContentResolver.java:445)
                      at com.my.code.services.ListenSmsMmsService$SMSObserver.onChange(ListenSmsMmsService.java:102)

这是创建异常的代码:

        public void onChange(boolean selfChange) {
            super.onChange(selfChange);


            /*first of all we need to decide message is Text or MMS type.*/
            final String[] projection = new String[] {"*"};

            Uri mainUri = Telephony.MmsSms.CONTENT_CONVERSATIONS_URI; //URI for query


            Cursor mainCursor = contentResolver.query(mainUri, projection, null, null, null);

最后一行是导致崩溃的行。即使我使用:

Uri mainUri = Uri.parse("content://mms-sms/conversations/");

和:

final String[] projection = new String[]{"_id", "ct_t"};

或者:

final String[] projection = new String[]{Telephony.MmsSms.TYPE_DISCRIMINATOR_COLUMN};

崩溃发生。

当我尝试运行查询时ContactsContract.PhoneLookup.CONTENT_FILTER_URI,查询成功。

可能是什么问题导致崩溃?

4

2 回答 2

1

content://mms-sms/conversations?simple=true这发生在许多其他三星设备上:似乎在这些设备上,没有后缀就无法查询?simple=true- 当您添加此后缀时,它会影响返回的列,这就是投影失败的原因。

请参阅此处以获取有关此的更多相关信息,尽管没有人真正知道它为什么会这样:(

可能有一种解决方法,使用未记录的 URI content://mms-sms/complete-conversations- 如您在此处阅读的那样。

于 2018-07-04T12:47:15.087 回答
0

我在三星设备上遇到了同样的问题,所以对于 SMS 对话,我尝试在这里的 SMS 表上按线程 ID 进行分组。

不幸的是content://mms-sms/complete-conversations,似乎并没有像这样在线程 id 上聚合content://mms-sms/conversations,因此您最终会收到来自同一个线程的多条消息。

于 2020-06-17T02:00:19.543 回答