我想通过打开一个文件来获得一个文件路径,该文件选择由start ActivityForResult,其意图是意图。ACTION_GET_CONTENT和setType(* / *), 但是当我选择打开“Nexus 5X”项时,返回uri是“com.android.externalstorage.documents”,如何处理这种类型uri。有一些代码。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(Intent.ACTION_DEVICE_STORAGE_OK, true);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setType("*/*");
startActivityForResult(intent, FILE_ADD_ACTION_REQUEST_CODE);
截图
如何处理这种类型的uri
使用ContentResolver
和openInputStream()
在Uri
标识的内容上获取InputStream
。
外部存储URI的形式如下:
content://com.android.externalstorage.documents/root%3Apath
其中root
是存储介质的根,:
只是一个转义冒号,path
是相对于根的文件系统路径(也是转义的)。
在具有模拟主存储器的设备(即现代Android设备)上,主存储器(即/sdcard
)的根通常被称为主
。在其他情况下,它似乎是媒体ID(由连字符分隔的4个十六进制数字)。
您也可以尝试使用此功能(需要API 21才能实现完整功能):
public static String getRealPathFromURI_API19(Context context, Uri uri) {
String filePath = "";
// ExternalStorageProvider
String docId = DocumentsContract.getDocumentId(uri);
String[] split = docId.split(':');
String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
} else {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
//getExternalMediaDirs() added in API 21
File[] external = context.getExternalMediaDirs();
if (external.length > 1) {
filePath = external[1].getAbsolutePath();
filePath = filePath.substring(0, filePath.indexOf("Android")) + split[1];
}
} else {
filePath = "/storage/" + type + "/" + split[1];
}
return filePath;
}
我正在尝试创建一个存储在我的谷歌硬盘中的文件列表,以及它们当前和以前的权限列表。具体地说,我想在我的谷歌硬盘中创建一个文件列表,在过去的任何时候都有“任何人都可以查看/编辑(etc)”权限集。 我已经创建了一个谷歌应用脚本来做到这一点,我可以迭代所有的文件,我可以得到当前具有该权限集的文件,但是我看不到获取文件权限历史的方法。 我已找到并激活修订列表API:https://developers.g
我想从URI中获得完整的文件路径。URI不是图像,而是音乐文件,但如果我像纵隔解决方案那样做,如果应用程序用户选择eg Astro作为浏览器,而不是音乐播放器,它就不会工作。我怎么解决这个?
我在尝试选择文件时获得URI: /外部/文件/15499 我如何将它转换成真实的文件路径? 注意:我阅读了以下主题: null
问题内容: 我在Eclipse中编写了一个应用程序,该应用程序已成功编译并运行。之后,在相应的目录中找到 .java和 .class文件。然后,我删除了* .class文件,现在我不知道该如何找回它。 Eclipse写道:“未编写类文件。如果这样,请尝试刷新此项目并进行构建,该项目可能会不一致”。 通过右键单击该项目,我得到了一个下拉菜单,在其中我找到了“刷新”,但找不到如何“构建”该项目。 那么
在Office365中,我们使用用户“UserA”将文件“File1”上载到OneDrive。然后,我们使用图形api获取该文件的权限(https://graph.microsoft.com/me/drives/[DriveId]/items/[itemId]/权限),并按预期获得权限: 然而,我们随后将相同的文件(使用相同的用户)上载到新创建的名为“Site1”的SharePoint网站,并获得
我正在尝试在我的Android10(API29)设备上获得MANAGE_EXTERNAL_STORAGE权限。 https://developer.android.com/training/data-storage/manage-all-files 清单: 主要活动: 但我怎样才能得到那个许可呢?