【问题标题】:Android - convert file to content URI without WRITE_EXTERNAL_STORAGE permission?Android - 在没有 WRITE_EXTERNAL_STORAGE 权限的情况下将文件转换为内容 URI?
【发布时间】:2014-12-23 18:23:19
【问题描述】:

我目前使用这种方法可以有效地将图像文件转换为内容uri...

protected static Uri convertFileToContentUri(Context context, File file) throws Exception {

    ContentResolver cr = context.getContentResolver();
    String imagePath = file.getAbsolutePath();
    String imageName = null;
    String imageDescription = null;
    String uriString = MediaStore.Images.Media.insertImage(cr, imagePath, imageName, imageDescription);
    return Uri.parse(uriString); }

...但问题是它需要android.permission.WRITE_EXTERNAL_STORAGE 权限。

有没有什么方法可以在不需要该权限的情况下执行相同的转换?

【问题讨论】:

    标签: android android-contentresolver


    【解决方案1】:

    这不会“将图像文件转换为内容 uri”。这会在MediaStoreContentProvider 中插入一个条目,这恰好给你一个Uri 回。但是,现在任何东西都可以获得该内容。这类似于在 Pastebin 上发布你的个人联系信息,因为你觉得你需要一个 URL,然后想知道为什么你会突然接到一堆非常奇怪的电话。 URL 是发布个人联系信息的副作用; Uri 是发布图片的副作用。

    如果您想通过ContentProvider 提供文件,请将ContentProvider 添加到您的应用中。根据您的文件所在的位置,您可以使用 Android 支持包(support-v4support-v13)提供的 the FileProvider。或者,通过覆盖openFile() 来滚动您自己的流ContentProvider

    【讨论】:

    • 谢谢,但你没看到我用了effectively这个词。
    • @ban-geoengineering:实际上,我有。这不会改变您的方法的问题特征,也不会改变将 content: Uri 解析为应用程序内部存储中的某些内容所需的解决方案。因为,根据定义,唯一可以访问应用程序内部存储的是您的应用程序,并且根据定义,处理content: Uri 的唯一东西是ContentProvider,您将需要实现一个ContentProvider 在您的应用中。
    • 好的,谢谢。我同意 ContentProvider 将是理想的解决方案。我已经实现了一个,它可以保存和检索图像数据以在 UI 上显示,但是当我使用它通过 google plus 共享图像时存在一些问题(这就是我创建这个问题的原因)。如果您可以帮助解决这个潜在问题,我的问题(有赏金)在这里:stackoverflow.com/questions/27591480/…
    猜你喜欢
    • 1970-01-01
    • 2020-04-24
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2021-08-01
    • 2019-04-17
    相关资源
    最近更新 更多