我在我的应用程序中添加了一个按钮,该按钮应该打开手机的下载文件夹,从那里您应该能够从同一个应用程序单击存储在那里的文件。现在我在那里保存一些数据。
问题是;我无法打开文件夹中保存的文件。 我可以看到存储在那里的文件,但是当我按下其中一个文件时,您会立即返回到应用程序,而不是您按下的文件。
我有什么遗漏的吗?您不应该从其他应用程序打开存储在外部存储中的文件吗?
我尝试在 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_VIEWIntent
如果您的目标是在您的应用程序中打开此 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/