gpt4 book ai didi

android - 如何使用intent.createChooser android获取任何类型的文件

转载 作者:行者123 更新时间:2023-12-04 02:20:05 26 4
gpt4 key购买 nike

我有这个代码:

protected void pickFile(View view){

///Codigo que abre la galeria de imagenes y carga la imagen en displayedImage

Intent intent = new Intent();
intent.setType("file/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Choose File to Upload"), 1);

}

//It's executed when leaving file system
@Override
protected void onActivityResult(int reqCode, int resCode, Intent data){
super.onActivityResult(reqCode, resCode, data);

if (reqCode == 1 && resCode == RESULT_OK && data != null) {
Uri selectedFile = data.getData();
RequestMaker.uploadFile(this, selectedFile, "this is a file");
}
}

我想要做的是能够从我的手机中选择任何文件并发送它。

该代码有效,它打开选择器并让我搜索任何文件。但是,我遇到了一些问题:
  • 当我尝试通过“内部存储”选项访问时,我无法选择任何项目。他们都是残疾人。我修复了安装文件管理器的问题,它让我可以选择我想要的文件,但也许有一个快速修复。
  • 当我选择文件并运行 Uri.getPath() 时,有时路径是有效的,其他的,一般来说,当我选择一些图像文件时,我得到的路径有错误。不是实际的。
    我在网上看到了一些修复,但它们都是用于从图库中选择图像,我想要通用的。

  • 我怎样才能解决这个问题?

    最佳答案

    The code works



    不,不是的。

    一、 file/*不是有效的 MIME 类型,甚至不是通配符 MIME 类型。 There is no MIME type that begins with file/ .如果您想要任何 MIME 类型,请尝试 */* .

    二、 ACTION_GET_CONTENT不允许用户“选择任何文件”。它允许用户从设备上实现 ACTION_GET_CONTENT 的任何应用程序中选择一段内容。选择尊重您的 MIME 类型的 Activity 。该 Activity 返回的是 Uri指向内容。这不一定是本地文件,更不用说您可以直接访问文件系统的文件了。

    When i select the file and run Uri.getPath(), sometimes the path is valid



    不,路径始终有效(至少在一段时间内)。它只是不是你想的那样。 A Uri is not a file .

    例如,假设您正在 Web 浏览器中查看此网页。如果您查看该 Web 浏览器的地址栏,您将看到以下 URL:
    https://stackoverflow.com/questions/33575449/how-to-get-any-type-of-file-with-intent-createchooser-android

    按照您的想法,这是指硬盘驱动器上位于 /questions/33575449/how-to-get-any-type-of-file-with-intent-createchooser-android 的文件。 .

    事实并非如此。 URL 的一部分表示路径相关的位置;在这种情况下,它指的是 Web 服务器。

    一个 Uri是一样的。特别是,如果 Uri有一个不是 file: 的方案, Uri只是一个地址,不一定映射到您可以直接到达的任何内容。就像 Web 浏览器开发人员使用 HTTP 获取此网页内容的流一样,您必须使用 ContentResolveropenInputStream()获取 content: 的内容 Uri值(value)观。

    How can i fix this?



    任何一个:
  • 使用 Uri作为 Uri , 与 openInputStream() , getType() ,以及 ContentResolver 上的类似方法, 或
  • 不要使用 ACTION_GET_CONTENT ,而是构建您自己的 UI 来浏览您的应用碰巧能够访问的文件。这将是设备上所有文件的子集,因为并非所有内容都位于您的应用可以访问的位置(例如,可移动媒体上的文件将丢失)。但是,它将您的代码与您的心智模型同步(即,您想要文件,而不是内容)。
  • 关于android - 如何使用intent.createChooser android获取任何类型的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33575449/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com