gpt4 book ai didi

android - 如何使用 Intent.ACTION_GET_CONTENT 过滤掉不需要的文件

转载 作者:太空狗 更新时间:2023-10-29 14:00:02 33 4
gpt4 key购买 nike

我正在使用 intent.ACTION_GET_CONTENT 来允许用户仅选择图像或视频文件。这就是我准备 Intent 的方式

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/* | video/*");
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
intent.addCategory(Intent.CATEGORY_OPENABLE);
XActivity.startActivityForResult(intent, ACQUIRE_IMAGE_AND_VIDEOS_CODE);

当我单击启动此 Intent 的按钮时,以下应用程序将显示在我的自定义对话框中

app dialog

下面是用可以处理上述 Intent 的应用程序填充我的对话框的方法,以及当点击对话框中的任何应用程序时发生的情况

private void inflateDialog(List<ResolveInfo> intents){

ListView lv = (ListView) dialog.findViewById(R.id.listView1);

Collections.sort(intents,
new ResolveInfo.DisplayNameComparator(packageManager));

appAdapter = new AppAdapter(packageManager, intents);

lv.setAdapter(appAdapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
ResolveInfo launchable = appAdapter.getItem(position);
ActivityInfo activity = launchable.activityInfo;
ComponentName name = new ComponentName(activity.applicationInfo.packageName,
activity.name);
IntentFilter filter = launchable.filter;

Iterator<String> actions = filter.actionsIterator();

Intent intent;

if (filter.hasAction(Intent.ACTION_GET_CONTENT)) {
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/* | video/*");
intent.setComponent(name);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
intent.addCategory(Intent.CATEGORY_OPENABLE);
xActivity.startActivityForResult(intent, ACQUIRE_IMAGE_AND_VIDEOS_REQUEST_CODE);
dialog.dismiss();
}
});
dialog.show();

}

当我点击厨房应用程序时,我可以看到图像和视频并选择任何一个。 与此同时,我收到一个 Toast,告诉我0 个图像/视频可用

当我点击文件管理器和谷歌驱动器时,我会看到所有文件。 没有对正在发生的图像和视频进行过滤

问题

  • 我如何强制过滤文件管理器和 Google 云端硬盘应用中的图像和视频?

  • 即使我可以选择图像和视频,为什么我在厨房收到 toast 0 个图像/视频可用

最佳答案

这是我能找到的过滤掉不需要的文件并处理我想要的文件的唯一方法。就我而言,我只想要视频和图像。

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);

if (resultCode == RESULT_OK) {

String filePath;
Uri file = intent.getData();
String mimeType ="";

if(file.getScheme().equals(ContentResolver.SCHEME_CONTENT)){

mimeType = ctx.getContentResolver().getType(selectedImage);

}else{
String fileExtension = MimeTypeMap.getFileExtensionFromUrl(file.toString());
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension.toLowerCase());
}


if(mimeType.startsWith("video/")){
//do something. for my case i get video path
filePath = getFilePath(file);


}else if(mimeType.startsWith("image/")){
//do something. for my case i get image path
filePath = getFilePath(file);
}
}
}

我的 getFilePath 方法

private String getFilePath(Uri fileuri){
String filePath = "";

if (fileuri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
Cursor cursor = this.getContentResolver().query(fileuri, new String[]{android.provider.MediaStore.Images.ImageColumns.DATA}, null, null, null);
cursor.moveToFirst();
filePath = cursor.getString(0);

cursor.close();
} else {
filePath = fileuri.getPath();
}
return filePath;
}

关于android - 如何使用 Intent.ACTION_GET_CONTENT 过滤掉不需要的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36397670/

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