当前位置: 首页 > 知识库问答 >
问题:

Android-选择并查看任何类型的文件

吕修筠
2023-03-14

为了选择文件项,我写了以下内容(我使用的是Kotlin,Java中的问题相同):

    fun goToDocumentPicker() {
        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
        intent.addCategory(Intent.CATEGORY_OPENABLE)
        intent.type = "*/*"
        if (intent.resolveActivity(mContext.packageManager) != null)
            mContext.startActivityForResult(intent, REQUEST_DOCUMENT)
    }

并显示选定的项目:

 fun showDocumentPreviewer(uri: Uri) {
        val i = Intent(Intent.ACTION_VIEW)
        i.data = uri
        mContext.startActivity(i)
    }

文档选择器工作良好,在onactivityresult中,我可以接收所选文档的Uri对象,但文档预览器无法打开该对象。已经尝试将mime-type设置为预览器的意图,但未成功。我在Android中使用了不正确的打开文件的方法吗?在Android中显示任何文件类型的通用方法吗?(因为我想支持很多文件类型)

fun showAttachmentPreviewer(uri: Uri, mimeType: String?) {
    Log.d("TEST", "Preview " + uri.toString())
    val intent = Intent(Intent.ACTION_VIEW, uri)
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

    val chooser = Intent.createChooser(intent, "Open with")
    if (intent.resolveActivity(mContext.packageManager) != null)
        mContext.startActivity(chooser)
    else
        mContext.showSnackBar("No suitable application to open file")
}

java.lang.SecurityException:Uid 10202没有访问uri 0@content:/com.android.providers.media.documents/document/audio:17915的权限

更新2:我的应用程序在mcontext.startactivity(chooser)行崩溃。以下是完整的崩溃日志:

致命异常:主进程:com.makeit.lite,PID:12851java.lang.SecurityException:Uid 10477没有uri 0@content:/com.android.providers.media.documents/document/image:24776在android.os.parcel.readexception(parcel.java:1540)在android.os.parcel.readexception(parcel.java:1493)在android.app.activitymanagerproxy.startactivity(activitymanagernative.java:2514)在:4152)在com.makeit.lite.attachment.AttachmentNavigator.ShowAttachmentPreviewer(AttachmentNavigator.kt:92)在com.makeit.lite.attachment.list.AttachmentListPresenter.OnAttachmentClicked(AttachmentListPresenter.37)在com.makeit.lite.attachment.List.AttachmentListFragment$OnViewed创建了$1.OnItemClick(AttachmentListFragment.39)在

更新3:如果我将mimeType设置为intent:intent.type=mimeType,那么应用程序就不会再崩溃了。mimetype是我从选择器意图(在content:uri旁边)获得的字符串。mimeType值可以是image/jpeg或任何基于所选文件类型的值。虽然它不会崩溃,但给定uri的文件也不会显示。如果我从Intent-Chooser中选择Gallery,那么该Gallery将打开并显示所有图像。我猜第三个应用程序不知道如何确定给定URI的html" target="_blank">文件。

下面是我的函数的最新来源:

fun showAttachmentPreviewer(uri: Uri, mimeType: String?) {
        Log.d("TEST", "Preview " + uri.toString() + " For type" + mimeType)
        val intent = Intent(Intent.ACTION_VIEW, uri)
        intent.type = mimeType //Can be "image/jpeg" or sth corresponding to the filetype.
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        val chooser = Intent.createChooser(intent, "Open with")
        if (intent.resolveActivity(mContext.packageManager) != null)
            mContext.startActivity(chooser)
        else
            mContext.showSnackBar("No suitable application to open file")
    }

共有1个答案

邵毅
2023-03-14

我在Android中使用了不正确的打开文件的方法吗?

首先,可能没有能够查看文件类型的app。

第二,你没有授予app查看内容的权限。在action_viewintent上使用addflags(intent.flag_grant_read_uri_permission)

 类似资料:
  • 我正在使用共享首选项为我的应用程序存储某些值。我想看看我的手机上实际存储信息的文件。我在Eclipse上找到了很多实现这一点的方法,但我正在Android Studio上调试。我的手机有根了。我读到拥有root访问权限对读取这些类型的文件很重要。如果没有办法,那么我将查找如何通过我的程序访问信息,然后输出到日志猫。希望,虽然,我可以直接在电话上查看文件,因为它要简单得多。多谢了。

  • 本文向大家介绍jQuery 选择器类型,包括了jQuery 选择器类型的使用技巧和注意事项,需要的朋友参考一下 示例 在jQuery中,您可以使用元素的许多不同属性来选择页面中的元素,包括: 类型 类 ID 拥有属性 属性值 索引选择器 伪状态 如果您知道CSS选择器,您会注意到jQuery中的选择器是相同的(只有少数例外)。 以以下HTML为例: 按类型选择: 以下jQuery选择器将选择所有<

  • 我想知道如何在android中从我的移动存储或sdcard查看. pptx powerpoint演示文件,我使用了Apache-poi,但它在android上不起作用。

  • 所以我在Android上做这个蓝牙项目,当我试图运行它(当然是在Android设备上)时,它给了我一条错误消息 我还是蓝牙的初学者。

  • 主要内容:数值类型,日期和时间类型,字符串类型,二进制类型MySQL 提供了大量的数据类型,为了优化存储和提高数据库性能,在任何情况下都应该使用最精确的数据类型。   前面主要对 MySQL 中的数据类型及其基本特性进行了描述,包括它们能够存放的值的类型和占用空间等。本节主要讨论创建数据库表时如何选择数据类型。   可以说字符串类型是通用的数据类型,任何内容都可以保存在字符串中,数字和日期都可以表示成字符串形式。   但是也不能把所有的列都定义为字符串类

  • 当我在 PHPStorm 中突出显示我的一些代码时,我想知道我选择了多少个字符。Sublime将显示所选的行数和所选的字符数。暴风有这个功能吗?