Android 如何使用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.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);
 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请看下面我的答案