gpt4 book ai didi

java - ACTION_GET_CONTENT 只有文件,没有图像或视频

转载 作者:行者123 更新时间:2023-11-29 20:51:38 25 4
gpt4 key购买 nike

好的,我用这个开始我的功能

    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/*(很多文件类型,不包括以下主要类型,但包括音频,如application/ogg)
  • 音频/*
  • 字体/*
  • 图片/*
  • 留言/*
  • 型号/*
  • 多部分/*
  • 正文/*
  • 视频/*

因此假设您希望能够选择除AudioVideo 或者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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com