Android 尝试将内容Uri从活动传递到服务时出现权限错误

Android 尝试将内容Uri从活动传递到服务时出现权限错误,android,android-intent,android-contentprovider,android-fileprovider,android-intentservice,Android,Android Intent,Android Contentprovider,Android Fileprovider,Android Intentservice,我有一个接受android.intent.action.SEND的活动。 它接受一些媒体文件和文本。 当它接受一个新的“共享”时,它会进行一些验证检查,并将Uri传递给服务,如下所示: Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM); Intent serviceIntent = new Intent(this, ShareService.class) .setData(uri) .addFlags

我有一个接受android.intent.action.SEND的活动。 它接受一些媒体文件和文本。 当它接受一个新的“共享”时,它会进行一些验证检查,并将Uri传递给服务,如下所示:

Uri uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
Intent serviceIntent = new Intent(this, ShareService.class)
        .setData(uri)
        .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) // probably redundant but harmless here       
        .putParcelableArrayListExtra(Constants.EXTRA_SHARE_FILES, uris)
startService(serviceIntent);
它适用于所有文件提供商,通常也适用于内容,但我不时收到失败报告:

Non-fatal Exception: java.lang.SecurityException: UID 10283 does not have permission to content://com.whatsapp.provider.media/item/33560 [user 0]

我能做些什么来保持Uri权限的有效性吗?我应该如何处理这种Uri?

请在应用程序中创建xml文件夹,并在xml中创建文件提供程序文件和网络安全配置文件,然后在AndroidMenifest.xml文件中声明文件提供程序

请在应用程序中创建xml文件夹,然后在xml中创建文件提供程序文件和网络安全配置文件在AndroidMenifest.xml文件中声明fileprovider

在这里可能是多余的但无害的-实际上,它是必要的。除此之外,什么是URI?没错,我在写问题时添加了注释,我错了。由于多个文件共享也由同一服务处理,因此我将URI设置为ArrayList URI=new ArrayList 1;uris.adduri;在接收服务中,我使用它们:ArrayList attachments=intent.getParcelableArrayListExtraConstants.EXTRA\u SHARE\u文件;顺便说一句,任意附加中的Uri值不包含在标志\u GRANT\u READ\u Uri\u PERMISSION中。这涵盖了Uri的数据方面,并涵盖了框架中硬编码的某些操作的某些附加部分。附加部分中的Uri与数据中的Uri相同,只是更容易传递和解析。它正在生产中,实际上适用于数千个Uri,但在这里和那里我看到了类似的错误消息哦,对不起,我误解了你之前的评论。是否存在这样一种情况:您的活动可能在服务启动之前就已经完成了?我不知道在这种边缘情况下,权限授予是如何工作的。可能是多余的,但在这里是无害的——实际上,它是必要的。除此之外,什么是URI?没错,我在写问题时添加了注释,我错了。由于多个文件共享也由同一服务处理,因此我将URI设置为ArrayList URI=new ArrayList 1;uris.adduri;在接收服务中,我使用它们:ArrayList attachments=intent.getParcelableArrayListExtraConstants.EXTRA\u SHARE\u文件;顺便说一句,任意附加中的Uri值不包含在标志\u GRANT\u READ\u Uri\u PERMISSION中。这涵盖了Uri的数据方面,并涵盖了框架中硬编码的某些操作的某些附加部分。附加部分中的Uri与数据中的Uri相同,只是更容易传递和解析。它正在生产中,实际上适用于数千个Uri,但在这里和那里我看到了类似的错误消息哦,对不起,我误解了你之前的评论。是否存在这样一种情况:您的活动可能在服务启动之前就已经完成了?我不知道在这种边缘情况下许可证是如何工作的。谢谢你的回答,但在这种情况下它似乎不是正确的答案谢谢你的回答,但在这种情况下它似乎不是正确的答案