【问题标题】:android - share image via intent - uri permissionsandroid - 通过意图共享图像 - uri 权限
【发布时间】:2014-06-15 18:05:51
【问题描述】:

参考我之前的question

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

1) Provider 应设置 android:grantUriPermission

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

我想看看不做第 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);
 }

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

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

【问题讨论】:

  • 您确定这不是您之前授予权限的Uri
  • @CommonsWare 我跑了 2 个测试。首先,我授予了权限。然后我注释了授予权限的代码行,并在 genymotion 中再次从 Android Studio 运行应用程序。 App2 是否保留之前授予的权限?
  • 当你授予权限时,是Context.grantUriPermission(),还是Intent标志?
  • @CommonsWare 我使用了上下文的 API。
  • @CommonsWare 我明白为什么。

标签: android android-intent


【解决方案1】:

根据documentation for FileProviderContext.grantUriPermission()

该权限一直有效,直到您通过调用撤销它 revokeUriPermission() 或直到设备重新启动。

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

Intent 中授予的权限在 接收活动处于活动状态。当堆栈完成时, 权限被自动删除。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多