- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我用这个开始我的功能
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(mimeType);
intent.addCategory(Intent.CATEGORY_OPENABLE);
三星
chooserIntent = Intent.createChooser(sIntent, context.getString(R.string.choosefilefrom));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {intent});
对于其他设备
chooserIntent = Intent.createChooser(intent, context.getString(R.string.choosefilefrom));
mimeType是允许使用的类型,此时是*/*
。但是如何排除图像和视频以仅在文件选择器中显示文件?我有 3 个 Intent ,一个用于图像,一个用于视频,一个用于文件。
最佳答案
如果你看一下https://www.iana.org/assignments/media-types/media-types.xhtml
那么你大概可以假设主要的 mime 类型:
application/ogg
)因此假设您希望能够选择除Audio
或Video
或者Images
之外的任何其他内容
那么下面应该可以解决这个问题:
String[] mimetypes = {
"application/*",
//"audio/*",
"font/*",
//"image/*",
"message/*",
"model/*",
"multipart/*",
"text/*",
//"video/*"
};
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); //Important part here
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, 10000);
然后当然要处理返回的 URI:
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 10000)
{
if (data != null)
{
if (data.getClipData() != null)
{
// multiple files selected
for (int i = 0; i < data.getClipData().getItemCount(); i++)
{
android.net.Uri uri = data.getClipData().getItemAt(i).getUri();
}
}
else
{
// single file selected
android.net.Uri uri = data.getData();
}
}
}
}
以下是正确获取所有 Uri
的方法:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 10000)
{
if (data != null)
{
List<Uri> sharedUris = getUrisFromIntent(data);
}
}
}
然后是 getUrisFromIntent
方法:
public static List<Uri> getUrisFromIntent(Intent intent) {
List<Uri> uriList = new ArrayList<>();
if (intent.getData() != null) {
uriList.add(intent.getData());
} else if (intent.getClipData() != null) {
for (int i = 0; i < intent.getClipData().getItemCount(); i++) {
uriList.add(intent.getClipData().getItemAt(i).getUri());
}
} else {
if (intent.getAction().equals(Intent.ACTION_SEND)) {
if (intent.hasExtra(Intent.EXTRA_STREAM)) {
Uri sharedFile = intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (sharedFile != null) {
uriList.add(sharedFile);
}
}
} else if (intent.getAction().equals(Intent.ACTION_SEND_MULTIPLE)) {
if (intent.hasExtra(Intent.EXTRA_STREAM)) {
List<Uri> sharedFiles = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (sharedFiles != null) {
uriList.addAll(sharedFiles);
}
}
}
}
return uriList;
}
这已经过测试并适用于 Android API 17 - 29
关于java - ACTION_GET_CONTENT 只有文件,没有图像或视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018757/
我正在使用 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 的类型,应用程序会崩溃
我是一名优秀的程序员,十分优秀!