- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用第 3 方文件管理器从文件系统中选择一个文件(在我的例子中是 PDF)。
这是我启动 Activity 的方式:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(getString(R.string.app_pdf_mime_type));
intent.addCategory(Intent.CATEGORY_OPENABLE);
String chooserName = getString(R.string.Browse);
Intent chooser = Intent.createChooser(intent, chooserName);
startActivityForResult(chooser, ActivityRequests.BROWSE);
这就是我在 onActivityResult
中的内容:
Uri uri = data.getData();
if (uri != null) {
if (uri.toString().startsWith("file:")) {
fileName = uri.getPath();
} else { // uri.startsWith("content:")
Cursor c = getContentResolver().query(uri, null, null, null, null);
if (c != null && c.moveToFirst()) {
int id = c.getColumnIndex(Images.Media.DATA);
if (id != -1) {
fileName = c.getString(id);
}
}
}
}
代码 fragment 是从 Open Intents 文件管理器 中借用的说明:
http://www.openintents.org/en/node/829
if-else
的目的是向后兼容。我想知道这是否是获取文件名的最佳方法,因为我发现其他文件管理器会返回各种东西。
例如,Documents ToGo 返回如下内容:
content://com.dataviz.dxtg.documentprovider/document/file%3A%2F%2F%2Fsdcard%2Fdropbox%2FTransfer%2Fconsent.pdf
getContentResolver().query()
返回 null
。
为了让事情变得更有趣,未命名的文件管理器(我从客户端日志中获得了这个 URI)返回如下内容:
/./sdcard/downloads/.bin
是否有从 URI 中提取文件名的首选方法,或者应该求助于字符串解析?
最佳答案
developer.android.com 有很好的示例代码: https://developer.android.com/guide/topics/providers/document-provider.html
仅提取文件名的压缩版本(假设“this”是一个 Activity):
public String getFileName(Uri uri) {
String result = null;
if (uri.getScheme().equals("content")) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
cursor.close();
}
}
if (result == null) {
result = uri.getPath();
int cut = result.lastIndexOf('/');
if (cut != -1) {
result = result.substring(cut + 1);
}
}
return result;
}
关于android - 如何从 Intent.ACTION_GET_CONTENT 返回的 URI 中提取文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5568874/
我正在使用 ACTION_GET_CONTENT,以便用户可以选择我的其余代码可以读取和处理的文本文件。 Intent intent = new Intent(); intent.setAction(
我在使用 ACTION_GET_CONTENT 从 Downloads 目录中选择文件时遇到问题。 如果我在本地存储中的 ES 资源管理器或文件管理器中删除任何文件,在我的应用程序中打开时,这些已删除
好的,我用这个开始我的功能 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(mimeType
我在我的应用中实现了一个文件选择器,如下所示: Intent intent = new Intent(); intent.setType("*/*"); intent.setAction(Intent
Google Drive 似乎有一个响应 GET_CONTENT 操作的 Activity ,但它没有导出。 我可以在我的应用程序中使用另一种方法从云端硬盘中提取内容,而无需从 云端硬盘启动流程吗?自
我有以下 Intent : Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("text/*"); start
我正在为我的 Android 应用实现导入功能。我想让用户选择他们想要从设备上的外部存储(确切地说是下载目录)和其他在线文件存储(例如 DropBox 和 Google Drive)导入的文件。 我在
流程是: 用户需要选择要使用的文本文件以及弹出的默认 Android 资源管理器。 然后我想存储包含文件名的字符串,以实际打开文件进行读取。 我想打开该文件并将其重写为应用内部存储上的新文件。 我想从
我正在尝试打开最近的窗口,该窗口只能选择图像和 pdf Intent intent = new Intent(); intent.setType("image/*"); intent.setActio
我正在尝试将文件选择器 Intent 中的选定文件(不限于图像,它可以是任何文件)放入一个 zip 文件。我需要完整的文件路径才能执行此操作,但 Intent 仅提供 uri 路径。 我试过 .get
我有一个使用 ACTION_GET_CONTENT 的已发布应用程序 Intent 让用户选择他/她的一张照片。这是启动 Intent 的代码: Intent intent = new Intent(
我正在尝试在 android 应用程序中阅读 pdf 文件。 触发以下 Intent 以获取 URI。 Intent intent = new Intent(Intent.ACTION_GET_CON
我的问题很简单。是否可以通过 Intent.ACTION_GET_CONTENT 以某种方式传递额外的数据?其中Activity收到Intent在它的onActivityResult()能读出吗? 现
我需要完成这些步骤: 让用户选择一个文件(任何类型的文件) 获取永久引用以便稍后访问文件或复制到我的内部存储。 第一个真的很简单。使用 Intent.ACTION_GET_CONTENT 获取文件没有
我正在尝试获取用户选择的文件的路径,为结果调用 intent ACTION_GET_CONTENT。 问题是当从文件管理器中选择一个音频文件时, Intent 不返回文件的扩展名(我检查过的文件名中有
我试图只显示 MP3 文件: Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("audio/mp3"); s
Web 和 stackoverflow 包含几个示例如何使用 ACTION_GET_CONTENT Intent 从另一个 Android 应用程序获取文件(例如,将其用作电子邮件附件)。但是我必须实
我正在开发一个应用程序,在此 Activity 中按下一个按钮,可以选择要上传的任何文件。文件选择器加载正确,但所有图像都无法选择(变灰)。我在 Manifest 文件中添加了 READ_EXTERN
在我的应用中,我需要从用户的库中获取音频文件。 为此,我将其称为 Intent: Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT)
作为docs说:“ACTION_GET_CONTENT 可以让用户浏览网络并下载所需的数据”。这就是我需要的,来自 Google Images。虽然,如果我使用此 Intent 的类型,应用程序会崩溃
我是一名优秀的程序员,十分优秀!