Android 如何使用Intent.ACTION\u GET\u内容过滤掉不需要的文件
我使用intent.ACTION\u GET\u内容只允许用户选择图像或视频文件。这就是我准备我的意图的方式Android 如何使用Intent.ACTION\u GET\u内容过滤掉不需要的文件,android,android-intent,android-image,android-gallery,Android,Android Intent,Android Image,Android Gallery,我使用intent.ACTION\u GET\u内容只允许用户选择图像或视频文件。这就是我准备我的意图的方式 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/* | video/*"); intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); intent.addCategory(Intent.CATEGORY_OPENABLE); XAct
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);
当我单击启动此意图的按钮时,以下应用将显示在我的自定义对话框中
下面是用应用程序填充我的对话框的方法,这些应用程序可以处理上述意图,以及单击对话框中的任何应用程序时发生的情况
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();
}
private void充气对话框(列出意图){
ListView lv=(ListView)dialog.findViewById(R.id.listView1);
集合。排序(意图,
新的ResolveInfo.DisplayNameComparator(packageManager));
appAdapter=新appAdapter(packageManager,意图);
低压设置适配器(appAdapter);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共单击(适配器视图arg0,视图arg1,内部位置,
长arg3){
//TODO自动生成的方法存根
ResolveInfo launchable=appAdapter.getItem(位置);
ActivityInfo activity=launchable.ActivityInfo;
ComponentName=新组件名(activity.applicationInfo.packageName,
活动名称);
IntentFilter过滤器=launchable.filter;
迭代器操作=filter.actionsIterator();
意图;
if(filter.hasAction(Intent.ACTION\u GET\u CONTENT)){
意向=新的意向(意向.行动\获取\内容);
intent.setType(“图像/*|视频/*”);
intent.setComponent(名称);
intent.putExtra(仅intent.EXTRA_本地_,true);
intent.addCategory(intent.CATEGORY\u可打开);
xActivity.startActivityForResult(意图、获取图像和视频请求代码);
dialog.dismise();
}
});
dialog.show();
}
当我点击galley应用程序时,我可以看到图像和视频并选择任何图像和视频。同时,我收到一份祝酒辞,告诉我0个可用的图像/视频
单击“文件管理器”和“谷歌硬盘”时,所有文件都会显示在屏幕上。不会对正在进行的图像和视频进行过滤。
问题
- 如何在file manager和google drive应用程序中强制过滤图像和视频
- 为什么即使我可以选择图像和视频,我仍会收到厨房上的toast0可用图像/视频
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;
}
你得到答案了吗?因为我也无法过滤掉。@VikramSingh请看下面我的答案