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

时间:2019-05-05 12:57:02

标签: java android file storage external

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

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

有什么我想念的吗?您不应该从另一个应用程序打开存储在外部存储中的文件吗?

我试图在manifest和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”打开。我可能会缺少什么? 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

  

但是当我按下其中之一时,您立即回到应用程序,而不是您按下的文件

这就是您的代码所做的。 ACTION_GET_CONTENT说:“让用户选择内容”。它不会说“在其他应用程序中打开该内容”。没有Intent动作可以说“让用户选择一条内容,然后在其他应用程序中打开该内容”。

  

有什么我想念的吗?

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

  • 对您的startActivityForResult()请求使用startActivity(),而不是ACTION_GET_CONTENT(并摆脱createChooser()位)
  • 覆盖onActivityResult()以获得用户选择的结果
  • 如果用户选择了某项内容(例如,您在RESULT_OK中得到了onActivityResult(),请创建一个ACTION_VIEW Intent,并用其从Uri Intent传递到onActivityResult(),然后在startActivity() ACTION_VIEW
  • 上调用Intent

相反,如果您的目标是在您的应用中打开此XML,则您将:

  • 对您的startActivityForResult()请求使用startActivity(),而不是ACTION_GET_CONTENT(并摆脱createChooser()位)
  • 覆盖onActivityResult()以获得用户选择的结果
  • 如果用户选择了某项内容(例如,您在RESULT_OK中得到了onActivityResult(),请从传递到Uri的{​​{1}}中获取Intent的内容,然后使用onActivityResult()ContentResolver进行一些有用的操作(例如,Uri读取内容)
  

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

openInputStream()使用MIME类型。它不一定会兑现您提供的起始ACTION_GET_CONTENT