正常情况下,
1.选择本地图片时应该使用如下代码:
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, REQUESTCODE_CHOOSEIMAGE);
2.选择本地视频时使用如下代码:
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
intent.setDataAndType(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, "video/*");
那么如果是不区分视频还是图片 需要用户随意选择 如何改呢?
研究了一下之后,可以使用如下代码实现:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});
此时牵扯到一个回调问题,现在不区分图片和视频,意味着要在回调后判断选择的文件类型或者用统一的方法处理,我使用统一的方法处理,不必区分文件类型:
Uri selectedImage = data.getData();
String[] filePathColumns = { MediaStore.Files.FileColumns.DISPLAY_NAME,
MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.SIZE,
MediaStore.Files.FileColumns.MIME_TYPE };
Cursor c = mContext.getContentResolver().query(selectedImage, filePathColumns, null, null, null);
c.moveToFirst();
String name = c.getString(c.getColumnIndex(filePathColumns[0]));//文件名
String path = c.getString(c.getColumnIndex(filePathColumns[1]));//完整路径
String size = c.getString(c.getColumnIndex(filePathColumns[2]));//文件大小
String type = c.getString(c.getColumnIndex(filePathColumns[3]));//类型 例如image/xxx
c.close();
2020.10.14补充一下:
不区分图片和视频的方法 不建议使用,

因为使用后系统会把所有匹配的应用都弹出给用户选择,尤其会弹出“通讯录”给用户选择,此时如果用户选了“通讯录”并且选了“总是/始终”,下次就弹不出来选项,而会直接跳到通讯录,而且一般用户不太容易去重置此选项。从代码角度也只有root设备才可以重置默认选项。当然可以引导用户手动重置。
如果用户误选了通讯录,点了“总是/始终”弹出选项,恢复方法:
(针对华为设备的解决方法是:打开 “设置”-》“应用”-》“联系人”-》 “应用信息”-》“默认打开”-》点击“清除默认设置 ” 即可 针对oppo设备的解决方法是:打开 “设置”-》“应用管理”-》“显示系统进程”-》“电话本”-》“默认打开“ -》点击“清除默认设置 ” 即可 以上解决方法 可能不同机型 有所不同 大概方法是一样的)
可以换一种方法跳转:
targetIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
targetIntent.setType("image/* video/*");
但是目前发现oppo机型 只能选到图片 不能选视频 临时方案是,如果判断是oppo机型使用如下方法避免用户误点“总是/始终”选项
intent = new Intent(Intent.ACTION_PICK);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});
intent = Intent.createChooser(intent,"标题");//这句是关键,强制每次都创建选择器!!!
这篇博客介绍了如何在Android中实现让用户选择本地图片或视频,包括如何编写通用的Intent代码以及处理选择后的回调。同时,博主提醒了不区分图片和视频可能导致的问题,即可能会让用户误选通讯录,并给出了恢复默认设置的步骤。

6972

被折叠的 条评论
为什么被折叠?



