【问题标题】:How to open this contentURI?如何打开这个 contentURI?
【发布时间】:2018-01-01 17:32:14
【问题描述】:

我制作了一个图像查看器,它(据说)可以从电子邮件客户端打开附件,它已经正确打开了 PNG 文件。特别是,我使用 K9,它使用(基本上)以下代码发送 ACTION_VIEW 意图:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityIfAvailable(getContext(), intent);

当我点击附件时,我的图片查看器会报告以下contentURI URL:

content://com.fsck.k9.tempfileprovider/temp/00ac996dc9f9539488ba4a6a349a8bf567267f5d?mime_type=image%2Fpng

我找不到/temp 文件夹,所以我想我做错了什么,和/或我不知道如何处理“提供者”?如何打开此 URI?

【问题讨论】:

    标签: android android-contentprovider


    【解决方案1】:

    如何打开这个 URI?

    使用contentfile 方案打开任何Uri 的方式相同:

    • Context 上致电getContentResolver() 以获取ContentResolver
    • ContentResolver 上调用openInputStream() 以获取InputStream 上由Uri 标识的内容

    【讨论】:

    • 对不起,我不明白,我应该更明确一点。我的方法只需要检索 k9 存储附件的文件名(解码等将在其他地方完成)。在上面的例子中,context.getContentResolver() 只有两列,URI 文件名00ac996dc9f9539488ba4a6a349a8bf567267f5d 和文件大小。它没有列名_data。我打电话给getContentResolver()Cursor cursor = context.getContentResolver().query(contentURI, null, null, null, null);
    • @LuisA.Florit: "我的方法只需要检索 k9 存储附件的文件名" -- 如果 Uricontent 方案,it does not have to point to a file, let alone a file that you can access
    • inputStream 是ParcelFileDescriptor,在原来的情况下,它是android.os.ParcelFileDescriptor$AutoCloseInputStream@425c23a0
    • @LuisA.Florit:“inputStream 是 ParcelFileDescriptor”——不,不是。这是一个ParcelFileDescriptor.AutoCloseInputStream。这里是the JavaDocs for this class。从您的角度来看,您应该坚持使用在 InputStream 上定义的方法,因为其他版本的 Android 会返回其他 InputStream 实现。
    • 对不起,如果我理解正确,我应该从 FileDescriptor 创建一个新文件,因为没有简单的方法来检索原始文件名?我的应用仅根据文件名打开图像...
    猜你喜欢
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多