gpt4 book ai didi

android - 通过 intent - uri 权限共享图像

转载 作者:行者123 更新时间:2023-11-29 16:01:33 27 4
gpt4 key购买 nike

引用我之前的question .

我想问一些特定于每个 URI 权限的问题。我知道要发送二进制数据,例如其 URI 由您的应用程序中的提供商持有的图像,必须完成两件事:

1) Provider 应该设置 android:grantUriPermission

2) Uri 权限必须通过 Intent.setFlags 或 context.grantUriPermission 授予

我想看看不做第2步的效果,我的提供者是:

  <provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.android.provider.DataSharing"
android:exported="false"
android:grantUriPermissions="true">

<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths"/>

</provider>

App1 与 App2 共享图像执行以下操作:

 File imagePath = new File(getApplicationContext().getFilesDir(), "images");
File newFile = new File(imagePath, "earth.jpg");
Uri contentUri = FileProvider.getUriForFile(getApplicationContext(),
"com.android.provider.DataSharing", newFile);
Intent i = new Intent();
i.setAction(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_STREAM, contentUri);
i.setType("image/jpeg");
startActivity(i);

我的接收应用程序 (App2) 执行:

 Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null){
ImageView iv = (ImageView) findViewById(R.id.imageView);
iv.setImageURI(imageUri);
}

但不知何故,即使没有通过 Intent 或上下文授予 URI 权限,我也可以在 App2 的 ImageView 中看到图像。我正在 Android 4.4 中进行测试。

有人可以帮我解释一下这种行为吗?我做了什么 App2 仍然有权访问图像?

最佳答案

根据documentation for FileProvider , Context.grantUriPermission():

The permission remains in effect until you revoke it by calling revokeUriPermission() or until the device reboots.

但是,如果您使用 Intent 标志:

Permissions granted in an Intent remain in effect while the stack of the receiving Activity is active. When the stack finishes, the permissions are automatically removed.

所以看起来这是预期的行为(如果您使用相同的图像/相同的 Uri 进行测试)。

关于android - 通过 intent - uri 权限共享图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24232550/

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