我使用intent.ACTION_GET_CONTENT来允许用户仅选择图片或视频文件。这是我准备我的意图的方式
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();
}
当我点击厨房应用程序时,我可以看到图像和视频,然后选择任何一个。 同时,我收到Toast告诉我 0张图片/视频。
当我点击文件管理器和谷歌驱动器时,我会看到所有文件。 没有对正在发生的图片和视频进行过滤。
问题
如何强制过滤文件管理器和Google直推车应用中的图片和视频?
为什么即使我可以选择图片和视频,我还会在厨房收到 0张图片/视频?
答案 0 :(得分:1)
这是我能找到的唯一方法来过滤掉不需要的文件并处理我想要的文件。对于我的情况,我只想要视频和图像。
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;
}