如何在Android中以编程方式打开外部文件夹?



我的应用程序下载epub文件到/external/downloads/{MyFolder}/。我通常可以在像Play Books这样的电子阅读器中自动打开文件。不过,在没有安装电子阅读器的情况下,作为备选方案,我想将设备的默认文件浏览器打开到MyFolder。在我的设备上,这个浏览器程序名为"我的文件"。

我得到一个ActivityNotFoundException。我如何以编程方式打开该文件浏览器?最理想的是放到{MyFolder}位置。

try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
File file = new File(fileUri.getPath());
File folder = new File(file.getParent());
Uri folderUri = Uri.fromFile(folder);
intent.setDataAndType(folderUri, "resource/folder");
getContext().startActivity(intent);
} catch (Exception e1) {
Toast.makeText(getContext(), "Ebook saving to " + fileUri.getPath(), Toast.LENGTH_LONG).show();
}

记录epub文件的fileUri.toString()为"content://media/external/downloads/16143"

.startActivity(intent)抛出异常:

没有找到处理意图的活动{act=android.intent.action.VIEW dat=content://com.{mydomain}.app. {mydomain}。Provider/root/external/downloads type =resource/folder flg=0x1}

我也试图改变folderUri声明如下,并得到类似的错误。

final ContentValues v = new ContentValues();
v.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + "/{MyFolder}/");
final ContentResolver r = getContext().getContentResolver();
Uri folderUri = r.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, v);

My AndroidManifest.xml有

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.{mydomain}.app.provider"
android:exported="false"
android:grantUriPermissions="true">
<!-- resource file to create -->
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

我的file_paths。xml中有

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external" path="." />
<external-files-path name="external_files" path="." />
<root-path name="root" path="." />
</paths>

我也尝试过路径是"。/",没有根路径元素,这没有什么区别。

如果你想用Files应用程序直接浏览公共DCIM文件夹中的Camera文件夹:

String scheme = "content://com.android.externalstorage.documents/document/primary%3ADCIM%2FCamera";
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(scheme), "vnd.android.document/root"); 
startActivity(intent );

我想你可以很容易地改变下载/文件夹。

我认为这只适用于Android 11+设备。

最新更新