java - 如何从应用程序打开外部存储中的文件? (安卓)

标签 java android file storage external

我在我的应用程序中添加了一个按钮,该按钮应该打开手机的下载文件夹,从那里您应该能够从同一个应用程序单击存储在那里的文件。现在我在那里保存一些数据。

问题是;我无法打开文件夹中保存的文件。 我可以看到存储在那里的文件,但是当我按下其中一个文件时,您会立即返回到应用程序,而不是您按下的文件。

我有什么遗漏的吗?您不应该从其他应用程序打开存储在外部存储中的文件吗?

我尝试在 list 中添加权限并在运行时检查 checkSelfpermission,但没有成功。

这是打开下载文件夹的按钮:

private void openSavedLocation(){
    if (ContextCompat.checkSelfPermission(ExportAndImport.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
    {
        ActivityCompat.requestPermissions(ExportAndImport.this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
    }

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    Uri uri = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath());
    intent.setDataAndType(uri, "text/xml");
    startActivity(Intent.createChooser(intent, "Open Folder"));}

当我在应用程序外部打开文件时,我可以完美地打开文件,而不是通过这个“createChooser”。我可能会缺少什么? 如有任何帮助,我们将不胜感激。

最佳答案

but when I press one of them you immediatley go back to the app and not the file that you pressed

这就是你的代码的作用。 ACTION_GET_CONTENT 表示“让用户选择一段内容”。它没有说“在其他应用程序中打开该内容”。没有单一的 Intent 操作来表示“让用户选择一段内容,然后在其他应用中打开该内容”。

Is there something I'm missing?

如果您想尝试在其他应用程序中打开 XML:

  • 针对 ACTION_GET_CONTENT 请求使用 startActivityForResult(),而不是 startActivity()(并去掉 createChooser() 位)
  • 重写onActivityResult()以获取用户选择的结果
  • 如果用户选择了某项(即,您在 onActivityResult() 中获得 RESULT_OK),请创建一个 ACTION_VIEW Intent,将您从传递到 onActivityResult()Intent 获取的 Uri 包裹起来,并在 AC 上调用 startActivity() TION_VIEW Intent

如果您的目标是在您的应用程序中打开此 XML,您将:

  • 针对 ACTION_GET_CONTENT 请求使用 startActivityForResult(),而不是 startActivity()(并去掉 createChooser() 位)
  • 重写onActivityResult()以获取用户选择的结果
  • 如果用户选择了某些内容(即,您在 onActivityResult() 中获得 RESULT_OK),请从传递到 onActivityResult()Intent 中获取内容的 Uri,然后使用 ContentResolver 对该 Uri 执行一些有用的操作(例如 openInputStream() code> 读取内容)

Here's the button for opening download folder

ACTION_GET_CONTENT 使用 MIME 类型。它不一定会遵循您提供的起始 Uri

关于java - 如何从应用程序打开外部存储中的文件? (安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55992186/

相关文章:

java - 如何在 JTable 中实现搜索

java - 带有 Spring Boot : Mix Basic Authentication with JWT token authentication 的 Spring Security

Android 相当于 ios 消息 ://

c - 在C中逐行读取文件(不使用fgets)

java - 如何防止 View 重叠?

java - 用于从时间戳到标准日期格式的日期转换的Unix命令?

java - 如何创建一个 android.util.Pair 对象数组?

android - React Native 应用程序崩溃 : Unable to load script from assets 'index.android.bundle'

java - 特定文件夹中的文件排序列表

java - 无法使用 Apache Tomcat 服务器访问硬盘驱动器中的文件