【问题标题】:Content provider grant uri permission内容提供者授予 uri 权限
【发布时间】:2014-05-24 06:52:52
【问题描述】:

我搜索并阅读了 android 开发人员文件,但没有找到任何令人满意的内容提供商授予 uri 权限的答案。谁能解释得更详细更简单。我的问题是: 授予 uri 用于什么用途? 授予uri权限真假有什么区别 什么时候应该使用true?什么时候假? 并感谢任何更多细节。

【问题讨论】:

    标签: android permissions uri provider grant


    【解决方案1】:

    授权 uri 用于什么用途?

    “授予Uri 权限”功能允许您拥有第三方通常无法访问的ContentProvider,但有选择地允许在短时间内访问各个第三方应用程序的各个Uri 值(例如,足以查看提供商提供的 PDF)。

    grant uri权限真假有什么区别

    android:grantUriPermissions="true" 表示您的 Java 代码可以将 FLAG_GRANT_READ_URI_PERMISSION 和 FLAG_GRANT_WRITE_URI_PERMISSION 用于由该 ContentProvider 服务的任何 Uri。

    android:grantUriPermissions="false" 表示只有子<grant-uri-permission> 元素指定的Uri 值可以与FLAG_GRANT_READ_URI_PERMISSION 和FLAG_GRANT_WRITE_URI_PERMISSION 一起使用。

    【讨论】:

    • 我仍然在同一点上,不明白为什么要使用grant uri,什么时候应该使用。能不能解释的更详细一点,像初级开发者一样告诉我。
    • @Android @CommonsWare 的意思是,如果 android:grantUriPermissions 设置为 false,Android 系统将检查清单是否有带有特定路径名的 <grant-uri-permission> 标记,应该允许使用 URI 权限,例如 <grant-uri-permission android:pathPattern="/notes/" /> <!-- for granting URI-based permissions to specific sub-branches of the provider -->
    【解决方案2】:

    假设您需要邮寄一些位于应用程序缓存目录中的文件。

    没有其他应用可以访问该文件,除非您指定其他应用可以访问您应用的内容。为此,您创建内容提供程序,并说所有 uri 格式为 content://com.your.app/file,您将“重定向”到您的应用程序缓存目录。

    一些代码:

    File f = ...; // Some local file.
    Uri uri = Uri.parse("content://com.your.app/" + f.getName());
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    intent.putExtra(Intent.EXTRA_TEXT, "Body");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    
    // You only can add flag FLAG_GRANT_READ_URI_PERMISSION if your app has 
    // android:grantUriPermissions="true" in manifest or see quote below.
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivity(Intent.createChooser(intent, "Send Email"));
    

    正如 CommonsWare 所说:

    android:grantUriPermissions="false" 表示只有 Uri 值 由子 元素指定的元素可以与 FLAG_GRANT_READ_URI_PERMISSION 和 FLAG_GRANT_WRITE_URI_PERMISSION。

    【讨论】:

      【解决方案3】:
             with adapter class and In Kotlin :- 
      
      
              val uri: Uri? = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID, file)
              
              val sharingIntent = Intent(Intent.ACTION_SEND)
              sharingIntent.type = "image/*"
              sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "Images ")
              sharingIntent.putExtra(Intent.EXTRA_STREAM, uri)
              
              val chooser = Intent.createChooser(sharingIntent, "Share File")
      
              val resInfoList: List<ResolveInfo> = mContext.packageManager
                  .queryIntentActivities(chooser, PackageManager.MATCH_DEFAULT_ONLY)
      
              for (resolveInfo in resInfoList) {
                  val packageName = resolveInfo.activityInfo.packageName
                  mContext.grantUriPermission(
                      packageName,
                      uri,
                      Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION
                  )
              }
              
              mContext.startActivity(chooser)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多