是否可以以这种方式启动Gallery,以便显示图片和视频?
由于
答案 0 :(得分:46)
//Use MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
//Use MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
//Use MediaStore.Images.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/* video/*");
答案 1 :(得分:37)
你这样开始画廊:
Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.setType("image/* video/*");
startActivityForResult(pickIntent, IMAGE_PICKER_SELECT);
然后在onActivityResult
中,您可以通过执行以下操作检查是否选择了视频或图片:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Uri selectedMediaUri = data.getData();
if (selectedMediaUri.toString().contains("image")) {
//handle image
} else if (selectedMediaUri.toString().contains("video")) {
//handle video
}
}
答案 2 :(得分:19)
(编辑:我不再使用它了,我们回到了两个选择“选择图像”和“选择视频”。问题出在一些索尼手机上。所以,它不是100%以下的解决方案,小心!)
这就是我使用的:
if (Build.VERSION.SDK_INT < 19) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/* video/*");
startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_picture)), SELECT_GALLERY);
} else {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});
startActivityForResult(intent, SELECT_GALLERY_KITKAT);
}
此处的关键是intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});
答案 3 :(得分:8)
intent.setType("*/*");
这为用户提供了对话框,但至少可以使用ICS。 Haven未在其他平台上进行测试。
答案 4 :(得分:5)
当您需要确定返回的内容类型时,您可以使用内容解析程序来获取返回内容的MIME类型:
if( data != null) {
Uri selectedUri = data.getData();
String[] columns = { MediaStore.Images.Media.DATA,
MediaStore.Images.Media.MIME_TYPE };
Cursor cursor = getContentResolver().query(selectedUri, columns, null, null, null);
cursor.moveToFirst();
int pathColumnIndex = cursor.getColumnIndex( columns[0] );
int mimeTypeColumnIndex = cursor.getColumnIndex( columns[1] );
String contentPath = cursor.getString(pathColumnIndex);
String mimeType = cursor.getString(mimeTypeColumnIndex);
cursor.close();
if(mimeType.startsWith("image")) {
//It's an image
}
else if(mimeType.startsWith("video")) {
//It's a video
}
}
else {
// show error or do nothing
}
答案 5 :(得分:1)
我的Galaxy标签附带的CoolIris可以做到。然而,我的acer betouch上的cooliris不会:S 在我的里程碑上,您无法使用视频网址上的选择意图启动图库但是当您在图片网址上启动它时,您可以选择一个视频,它也会返回一个视频网址。
答案 6 :(得分:0)
您需要使用以下内容作为选择意图
Intent photoLibraryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoLibraryIntent.setType("image/* video/*");
答案 7 :(得分:0)
UPDATE 2021
终于找到了适用于 Android 9 的解决方案。
这段代码只打开图片应用,可以选择图片和视频。我尝试了一堆不同的组合,这个确切的代码可以让它工作。
libraryIntent.setType("video/*, image/*");
String[] mimetypes = {"image/*", "video/*"};
libraryIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
答案 8 :(得分:-1)
不,库存图库应用无法实现。您可以尝试搜索执行此操作的应用。