如何打开图库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 - 分析启动流程

保存到 sd 卡的图像不会出现在 Android 图库应用中

在 Android 4.4 中从图库中选择时裁剪

在 Android 图库中选择多张图片

[android] 从gallery获取图片

代码如何从 Gallery Android 加载图像