Android调用系统图库选择图片 安卓调用系统图库

项目中经常会遇到选取图片上传这种需求,这里总结下:

1、调用系统提供的图片选择器,代码如下:

//注意,在Android4.4系统下建议使用 Intent.ACTION_OPEN_DOCUMENT方式

if (Utility.isKK()) {

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image
public static String getDataColumn(Context context, Uri uri, Stringselection,
String[] selectionArgs) {

Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column

};

处理返回结果:

protected void onActivityResult(int requestCode, intresultCode,
Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PIC_RESULT://选择图库
case PIC_RESULT_KK:
imageFileUri =intent.getData();//获取选择图片的URI
break;

2、除此自外,系统还提供一种选择器,这个图片选择器可以屏蔽掉那个autobackup的目录.所以就开始打算用这个图片选择器来选图片了.
Intent intent=newIntent(Intent.ACTION_GET_CONTENT);//ACTION_OPEN_DOCUMENT
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/jpeg");
if(android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.KITKAT){
startActivityForResult(intent, SELECT_PIC_KITKAT);
}else{
startActivityForResult(intent, SELECT_PIC);
}

为什么要分开不同版本呢?其实在4.3或以下可以直接用ACTION_GET_CONTENT的,在4.4或以上,官方建议用ACTION_OPEN_DOCUMENT,主要区别是他们返回的Uri.4.3返回的是带文件路径的,而4.4返回的却是content://com.android.providers.media.documents/document/image:3951这样的,没有路径,只有图片编号的uri.可以通过以下方式,处理URI。

参考:Android 4.4从图库选择图片,获取图片路径并裁剪

public static String getPath(final Context context, final Uriuri) {

final boolean isKitKat = Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context,uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];

if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" +split[1];
}

// TODO handle non-primary volumes
}
// DownloadsProvider
else if (isDownloadsDocument(uri)) {

final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"),Long.valueOf(id));

return getDataColumn(context, contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];

Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}

final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};

return getDataColumn(context, contentUri, selection,selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme())) {

// Return the remote address
if (isGooglePhotosUri(uri))
return uri.getLastPathSegment();

return getDataColumn(context, uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}

return null;
}


public static String getDataColumn(Context context, Uri uri, Stringselection,
String[] selectionArgs) {

Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};

try {
cursor = context.getContentResolver().query(uri, projection,selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
Android调用系统图库选择图片 安卓调用系统图库
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}



public static boolean isExternalStorageDocument(Uri uri) {
return"com.android.externalstorage.documents".equals(uri.getAuthority());
}


public static boolean isDownloadsDocument(Uri uri) {
return"com.android.providers.downloads.documents".equals(uri.getAuthority());
}


public static boolean isMediaDocument(Uri uri) {
return"com.android.providers.media.documents".equals(uri.getAuthority());
}


public static boolean isGooglePhotosUri(Uri uri) {
return"com.google.android.apps.photos.content".equals(uri.getAuthority());
}

3、使用其它开源组件如PhotoView。

推荐:http://www.2cto.com/kf/201401/275361.html

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/266827.html

更多阅读

安卓系统手机如何刷机教程 安卓系统手机刷机教程

安卓系统手机如何刷机教程——简介手机系统就跟电脑系统是一样,刷机也就跟安装电脑系统一样。手机刷机就是改变你手机的系统,比如你手机是安卓2.0的,你可以刷成安卓4.0的。安卓系统手机如何刷机教程——工具/原料电脑安卓手机安卓系

安卓系统坏了怎么办 手机系统坏了

安卓系统就像电脑上面的windows一样,有自己的操作环境。如果我们在日常使用手机过程当中,自己不注意,比如乱刷机,乱安装一些应用程序或者自己操作不当等原因,可能会导致系统崩溃,出现频繁司机、重启、触屏不灵等情况。那么安卓系统

安卓手机防盗措施 小区防盗措施

安卓手机防盗措施——简介Android系统对权限的管理相对开放,因此第三方软件很容易就能借助距离和光线传感器、发送短倍、自动拍照等权限实现理想的防盗功能。因此,手机防盗的就以Android系统的手机(也适用于平板)为例。安卓手机防盗措

Android安卓开发环境搭建详细教程 android开发环境搭建

Android安卓开发环境搭建详细教程——简介注:本教程是讲解在Windows XP下搭建安卓开发环境的。安装目录:步骤1 安装JDK步骤2 安装 Android SDK步骤3 安装Tomcat步骤4 安装Ant步骤5 安装Eclipse步骤6 安装Eclipse的ADT插件步骤7 在图形

如何在电脑上装安卓系统 精 怎样在电脑上装双系统

如何在电脑上装安卓系统 精——简介 安卓系统在移动设备上已不陌生,但是如何在电脑上安装安卓系统(不通过模拟器)呢?本经验就来详细地教你怎么把安卓系统安装到电脑上运行。如何在电脑上装安卓系统 精——工具/原料

声明:《Android调用系统图库选择图片 安卓调用系统图库》为网友心酸的情歌分享!如侵犯到您的合法权益请联系我们删除