首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >null后Uri为null - SMS内容提供者[Android 30+]

null后Uri为null - SMS内容提供者[Android 30+]
EN

Stack Overflow用户
提问于 2021-10-04 16:19:15
回答 1查看 176关注 0票数 1
代码语言:javascript
运行
复制
    public void save(AppCompatActivity context, SMSListener listener) {
    mContext = context;
    try {
    //  String mode = SMSData.getSMS_typeText(type_internal);
        ContentValues values = returnContentValues(); // content values
        ContentResolver resolver = context.getContentResolver();
        Uri uri = Telephony.Sms.CONTENT_URI;
        if (resolver != null && uri != null)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                ContentProviderClient client =
                        resolver.acquireContentProviderClient(Telephony.Sms.CONTENT_URI);
                client.insert(uri, values);
                client.release();
            } else {
                resolver.insert(uri, values);
            }
        else {
            listener.onCompleted(false);
            return;
        }
        listener.onCompleted(true);
    } catch (Exception ex) {
        ex.printStackTrace();
        listener.onCompleted(false);
    }

因此,这是我到目前为止编写的代码,试图编写SMS内容提供者,它在针对SDK级别<30时运行良好,但是对于>= 30,它会抛出以下异常。(试图直接插入内容解析器,而不是ContentProviderClient,但例外情况是一样的!(关于30+)

代码语言:javascript
运行
复制
System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getAuthority()' on a null object reference
System.err:     at android.os.Parcel.createExceptionOrNull(Parcel.java:2379)
System.err:     at android.os.Parcel.createException(Parcel.java:2357)
System.err:     at android.os.Parcel.readException(Parcel.java:2340)
System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:190)
System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
System.err:     at android.content.ContentProviderProxy.insert(ContentProviderNative.java:549)
System.err:     at android.content.ContentProviderClient.insert(ContentProviderClient.java:348)
System.err:     at android.content.ContentProviderClient.insert(ContentProviderClient.java:337)
System.err:     at xxxxx.zzzz.dddd.save(SMSCreator.java:94)

我已经检查了SMS内容解析器不为空的权限(通过编写测试代码),然后我了解了Android中与包可见性相关的问题,因此我将其包括在清单中&还包括了QUERY_ALL_PACKAGES

代码语言:javascript
运行
复制
<queries>
    <package android:name="string" />
    <provider
        android:authorities="list"
        android:exported="false" />
</queries>

为了确保我还运行了一些代码,这些代码打印SMS提供者的权限,输出包括:

代码语言:javascript
运行
复制
[content://sms, content://sms-changes, content://mms-sms]

我还使应用程序默认的SMS应用程序与所有必要的权限。我错过了什么,这样代码就不能在Android Q+中工作了?

此外,我检查了Uri和它的授权值都是空的,那么为什么getAuthority()要抛出空呢?我使用了与Google的消息应用程序类似的代码,结果仍然相同。

UPDATE:虽然我已经对uri做了空检查,但它说在Android10设备上

代码语言:javascript
运行
复制
W/System.err: java.lang.NullPointerException: Uri must not be null
W/System.err:     at android.os.Parcel.createException(Parcel.java:2077)
W/System.err:     at android.os.Parcel.readException(Parcel.java:2039)
W/System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
W/System.err:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
W/System.err:     at android.content.ContentProviderProxy.insert(ContentProviderNative.java:481)
W/System.err:     at android.content.ContentProviderClient.insert(ContentProviderClient.java:318)
W/System.err:     at xxxxx.zzzz.dddd.save(SMSCreator.java:94)

(使用Pixel 5/Moto One)

EN

回答 1

Stack Overflow用户

发布于 2021-10-05 11:25:23

尝试使用此权限

代码语言:javascript
运行
复制
mActivity.getActivityResultRegistry().register("key", new ActivityResultContracts.OpenDocument(), result -> {
                        mActivity.getApplicationContext().getContentResolver().takePersistableUriPermission(
                                result,
                                Intent.FLAG_GRANT_READ_URI_PERMISSION
                        );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69439279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档