gpt4 book ai didi

android - 为 ACTION_SEND Intent 过滤器 uri 获取持久性 URI 权限导致 SecurityException

转载 作者:行者123 更新时间:2023-12-05 00:18:05 46 4
gpt4 key购买 nike

我的用户可以通过ACTION_OPEN_DOCUMENT选择文件

val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.OpenDocument(),
onResult = onResult
)

之后我使用takePersistableUriPermission

contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)

这很好用!现在选择器 UI 不是我所说的最佳,所以我还想允许通过与我的应用共享文件来反转控制流。

<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>

在我的 Activity 中的 onCreateonNewIntent 中,我还想获得持久 URI 权限。

override fun onNewIntent(intent: Intent?) {
// null checks etc
val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri ?: return
contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
// ...
}

然而,这会导致 SecurityException:

java.lang.SecurityException: No persistable permission grants found for UID 10146 and Uri content://com.google.android.apps.photos.contentprovider/-1/1/content://media/external/images/media/61/REQUIRE_ORIGINAL/NONE/image/jpeg/702648108

有什么办法可以实现吗?

最佳答案

Is there a way to achieve this?

一般不会。 takePersistableUriPermission() 用于存储访问框架 Uri 值,如在您的 ACTION_OPEN_DOCUMENT 场景中。它不适用于任意 Uri 值,就像您可能通过 ACTION_PICKEXTRA_STREAM 在接收 ACTION_SEND 时获得,或Uri 传递给 ACTION_VIEW

对于ACTION_SENDACTION_VIEW 等,您需要假设您的应用对内容只有短暂的访问权限。如果您需要长期访问,则需要进行某种“导入”操作并制作您自己的内容副本。

关于android - 为 ACTION_SEND Intent 过滤器 uri 获取持久性 URI 权限导致 SecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69698865/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com