如何打开图库android gallery
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何打开图库android gallery相关的知识,希望对你有一定的参考价值。
参考技术A android原生内置了很多App,而Gallery为图库,用于操作设备上的图片,它会在开机的时候主动扫描设备上存储的图片,并可以使用Gallery操作它们。既然要使用Gallery,那么先看看它的AndroidManifest.xml清单文件。<activity android:name="com.android.camera.ImageGallery"
android:label="@string/gallery_label"
android:configChanges="orientation|keyboardHidden"
android:icon="@drawable/ic_launcher_gallery">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/video" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.OPENABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/image" />
</intent-filter>
</activity>
上面是Gallery的AndroidManifest.xml文件中的部分代码,展示了ImageGallery,从众多Intent-filter中可以看出,选取图片应该使用"android.intent.action.PICK",它有两个miniType,"image/*"是用来获取图片的、"video/*"是用来获取视频的。Android中众多Action的字符串其实被封装在Intent类中,android.intent.action.PICK也不例外,它是Intent.ACTION_PICK。
既然知道了启动Gallery的Action,那么再看看ImageGallery.java的源码,找找其中选中图片后的返回值。
private void launchCropperOrFinish(IImage img)
Bundle myExtras = getIntent().getExtras();
long size = MenuHelper.getImageFileSize(img);
if (size < 0)
// Return if the image file is not available.
return;
if (size > mVideoSizeLimit)
DialogInterface.OnClickListener buttonListener =
new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int which)
dialog.dismiss();
;
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle(R.string.file_info_title)
.setMessage(R.string.video_exceed_mms_limit)
.setNeutralButton(R.string.details_ok, buttonListener)
.show();
return;
String cropValue = myExtras != null ? myExtras.getString("crop") : null;
if (cropValue != null)
Bundle newExtras = new Bundle();
if (cropValue.equals("circle"))
newExtras.putString("circleCrop", "true");
Intent cropIntent = new Intent();
cropIntent.setData(img.fullSizeImageUri());
cropIntent.setClass(this, CropImage.class);
cropIntent.putExtras(newExtras);
/* pass through any extras that were passed in */
cropIntent.putExtras(myExtras);
startActivityForResult(cropIntent, CROP_MSG);
else
Intent result = new Intent(null, img.fullSizeImageUri());
if (myExtras != null && myExtras.getBoolean("return-data"))
// The size of a transaction should be below 100K.
Bitmap bitmap = img.fullSizeBitmap(
IImage.UNCONSTRAINED, 100 * 1024);
if (bitmap != null)
result.putExtra("data", bitmap);
setResult(RESULT_OK, result);
finish();
以上的ImageGallery.java的部分源码,从setResult()方法可以看出,它返回的Intent包含了选中图片的Uri,它是一个content://开头的内容提供者,并且如果传递过去的Intent的Extra中,包含一个name为"return-data"并且值为true的时候,还会往Extra中写入name为"data"的图片缩略图。本回答被提问者和网友采纳
在 Android 图库中选择多张图片
【中文标题】在 Android 图库中选择多张图片【英文标题】:select multiple images in Android Gallery 【发布时间】:2012-03-11 21:11:01 【问题描述】:我正在使用一个应用程序,该应用程序具有从 android 内置 Gallery/Camera
中选择多个图像的一种功能。
图库已使用以下代码成功打开。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
但我只能从图库中选择一张图片。所以请建议我如何从内置图库中选择多个图像。
提前致谢!!!
【问题讨论】:
您是否注意到您的问题在 *** 上至少有 2 个重复项? (***.com/questions/3058922/…) (***.com/questions/4746661/…) 【参考方案1】:我已经参考了这两个链接link 1
1:Select Multiple Images Using GalleryView 和 link 2
但没有得到我正在寻找的 Ans .. 但我找到了替代解决方案。从内置图库中获取所有图像并将其设置为我们自定义的 Gellery .. 请查看此链接 Custom Gallery with checkbox
希望对你有所帮助。
【讨论】:
【参考方案2】:嗯,这是一个老问题,但我想这可能对某些人仍然有用。 我刚刚发布了我的多图像选择活动的源代码。您可以在以下 GitHub 存储库中找到它:
https://github.com/derosa/MultiImageChooser
希望对你有用!
【讨论】:
这是一个很好的解决方案。它仍然需要一些改进,因为它在向下/向上滚动时并不平滑。 @PareshMayani true,但这与缩略图请求方法有关。有一天我会重新编码以使其异步。 我已经这样做了 :) 将在我的博客上发布相同的文章。 我有一个问题,我如何整合它以便它可以由 startActivityForResult() 启动 以上链接有问题github.com/derosa/MultiImageChooser/issues/1改用这个github.com/derosa/MultiImageChooser/tree/notthemed【参考方案3】: Cursor imagecursor1 = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy + " DESC");
this.imageUrls = new ArrayList<String>();
imageUrls.size();
for (int i = 0; i < imagecursor1.getCount(); i++)
imagecursor1.moveToPosition(i);
int dataColumnIndex = imagecursor1
.getColumnIndex(MediaStore.Images.Media.DATA);
imageUrls.add(imagecursor1.getString(dataColumnIndex));
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_image)
.showImageForEmptyUri(R.drawable.image_for_empty_url)
.cacheInMemory().cacheOnDisc().build();
imageAdapter = new ImageAdapter(this, imageUrls);
gridView = (GridView) findViewById(R.id.PhoneImageGrid);
gridView.setAdapter(imageAdapter);
您想要更多说明。 http://mylearnandroid.blogspot.in/2014/02/multiple-choose-custom-gallery.html
【讨论】:
以上是关于如何打开图库android gallery的主要内容,如果未能解决你的问题,请参考以下文章
Android 7.0 Gallery图库源码分析2 - 分析启动流程