【移动应用开发技术】怎么在Android中实现选择相册照片并返回功能_第1页
【移动应用开发技术】怎么在Android中实现选择相册照片并返回功能_第2页
【移动应用开发技术】怎么在Android中实现选择相册照片并返回功能_第3页
【移动应用开发技术】怎么在Android中实现选择相册照片并返回功能_第4页
【移动应用开发技术】怎么在Android中实现选择相册照片并返回功能_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么在Android中实现选择相册照片并返回功能

这篇文章将为大家详细讲解有关怎么在Android中实现选择相册照片并返回功能,文章内容质量较高,因此在下分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先由于进行读写操作,要在AndroidManifest.xml中声明权限:<uses-permission

android:name=“android.permission.READ_EXTERNAL_STORAGE”

/>

<uses-permission

android:name="android.permission.READ_EXTERNAL_STORAGE"

/>调用系统相册:private

static

final

int

CHOOSE_PHOTO=0;

Intent

intent

=

new

Intent(“ent.action.GET_CONTENT”);

intent.setType(”image/*”);

startActivityForResult(intent,

CHOOSE_PHOTO);

[java]

view

plain

copy

private

static

final

int

CHOOSE_PHOTO=0;

Intent

intent

=

new

Intent("ent.action.GET_CONTENT");

intent.setType("image/*");

startActivityForResult(intent,

CHOOSE_PHOTO);然后回调:@Override

protected

void

onActivityResult(int

requestCode,

int

resultCode,

Intent

data)

{

switch

(requestCode)

{

case

CHOOSE_PHOTO:

if

(resultCode

==

RESULT_OK)

{

Bitmap

bitmap

=

null;

//判断手机系统版本号

if

(Build.VERSION.SDK_INT

>=

19)

{

//4.4及以上系统使用这个方法处理图片

bitmap

=

ImgUtil.handleImageOnKitKat(this,

data);

//ImgUtil是自己实现的一个工具类

}

else

{

//4.4以下系统使用这个方法处理图片

bitmap

=

ImgUtil.handleImageBeforeKitKat(this,

data);

}

ImageView

view

=

(ImageView)

findViewById(R.id.personal_info_header_img);

view.setImageBitmap(bitmap);

}

break;

default:

break;

}

}@Override

protected

void

onActivityResult(int

requestCode,

int

resultCode,

Intent

data)

{

switch

(requestCode)

{

case

CHOOSE_PHOTO:

if

(resultCode

==

RESULT_OK)

{

Bitmap

bitmap

=

null;

//判断手机系统版本号

if

(Build.VERSION.SDK_INT

>=

19)

{

//4.4及以上系统使用这个方法处理图片

bitmap

=

ImgUtil.handleImageOnKitKat(this,

data);

//ImgUtil是自己实现的一个工具类

}

else

{

//4.4以下系统使用这个方法处理图片

bitmap

=

ImgUtil.handleImageBeforeKitKat(this,

data);

}

ImageView

view

=

(ImageView)

findViewById(R.id.personal_info_header_img);

view.setImageBitmap(bitmap);

}

break;

default:

break;

}

}将对图像的相关操作封装成一个ImgUtil类,便于使用:import

android.annotation.TargetApi;

import

android.content.ContentUris;

import

android.content.Context;

import

android.content.Intent;

import

android.content.SharedPreferences;

import

android.database.Cursor;

import

android.graphics.Bitmap;

import

android.graphics.BitmapFactory;

import

.Uri;

import

android.preference.PreferenceManager;

import

vider.DocumentsContract;

import

vider.MediaStore;

import

android.text.TextUtils;

import

java.io.ByteArrayInputStream;

import

java.io.ByteArrayOutputStream;

/**

*

Created

by

wbin

on

2016/3/22.

*/

public

class

ImgUtil

{

//4.4及以上系统使用这个方法处理图片

@TargetApi(19)

public

static

Bitmap

handleImageOnKitKat(Context

context,

Intent

data)

{

String

imagePath

=

null;

Uri

uri

=

data.getData();

if

(DocumentsContract.isDocumentUri(context,

uri))

{

//如果是document类型的Uri,则通过document

id处理

String

docId

=

DocumentsContract.getDocumentId(uri);

if

(“viders.media.documents”.equals(uri.getAuthority()))

{

String

id

=

docId.split(”:”)[1];

//解析出数字格式的id

String

selection

=

MediaStore.Images.Media._ID

+

”=”

+

id;

imagePath

=

getImagePath(context,

MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

selection);

}

else

if

(“viders.downloads.documents”.equals(uri.getAuthority()))

{

Uri

contentUri

=

ContentUris.withAppendedId(

Uri.parse(”content://downloads/public_downloads”),

Long.valueOf(docId));

imagePath

=

getImagePath(context,

contentUri,

null);

}

}

else

if

(“content”.equalsIgnoreCase(uri.getScheme()))

{

//如果不是document类型的Uri,则使用普通方式处理

imagePath

=

getImagePath(context,

uri,

null);

}

return

getImage(imagePath);

}

//4.4以下系统使用这个方法处理图片

public

static

Bitmap

handleImageBeforeKitKat(Context

context,

Intent

data)

{

Uri

uri

=

data.getData();

String

imagePath

=

getImagePath(context,

uri,

null);

return

getImage(imagePath);

}

public

static

String

getImagePath(Context

context,

Uri

uri,

String

selection)

{

String

path

=

null;

//通过Uri和selection来获取真实的图片路径

Cursor

cursor

=

context.getContentResolver().query(uri,

null,

selection,

null,

null);

if

(cursor

!=

null)

{

if

(cursor.moveToFirst())

{

path

=

cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));

}

cursor.close();

}

return

path;

}

//对bitmap进行质量压缩

public

static

Bitmap

compressImage(Bitmap

image)

{

ByteArrayOutputStream

baos

=

new

ByteArrayOutputStream();

press(Bitmap.CompressFormat.JPEG,

100,

baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

int

options

=

100;

while

(baos.toByteArray().length

/

1024

>

100)

{

//循环判断如果压缩后图片是否大于100kb,大于继续压缩

baos.reset();//重置baos即清空baos

press(Bitmap.CompressFormat.JPEG,

options,

baos);//这里压缩options%,把压缩后的数据存放到baos中

options

-=

10;//每次都减少10

}

ByteArrayInputStream

isBm

=

new

ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中

Bitmap

bitmap

=

BitmapFactory.decodeStream(isBm,

null,

null);//把ByteArrayInputStream数据生成图片

return

bitmap;

}

//传入图片路径,返回压缩后的bitmap

public

static

Bitmap

getImage(String

srcPath)

{

if

(TextUtils.isEmpty(srcPath))

//如果图片路径为空

直接返回

return

null;

BitmapFactory.Options

newOpts

=

new

BitmapFactory.Options();

//开始读入图片,此时把options.inJustDecodeBounds

设回true了

newOpts.inJustDecodeBounds

=

true;

Bitmap

bitmap

=

BitmapFactory.decodeFile(srcPath,

newOpts);//此时返回bm为空

newOpts.inJustDecodeBounds

=

false;

int

w

=

newOpts.outWidth;

int

h

=

newOpts.outHeight;

//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为

float

hh

=

800f;//这里设置高度为800f

float

ww

=

480f;//这里设置宽度为480f

//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可

int

be

=

1;//be=1表示不缩放

if

(w

>

h

&&

w

>

ww)

{//如果宽度大的话根据宽度固定大小缩放

be

=

(int)

(newOpts.outWidth

/

ww);

}

else

if

(w

<

h

&&

h

>

hh)

{//如果高度高的话根据宽度固定大小缩放

be

=

(int)

(newOpts.outHeight

/

hh);

}

if

(be

<=

0)

be

=

1;

newOpts.inSampleSize

=

be;//设置缩放比例

//重新读入图片,注意此时已经把options.inJustDecodeBounds

设回false了

bitmap

=

BitmapFactory.decodeFile(srcPath,

newOpts);

return

compressImage(bitmap);//压缩好比例大小后再进行质量压缩

}

}import

android.annotation.TargetApi;

import

android.content.ContentUris;

import

android.content.Context;

import

android.content.Intent;

import

android.content.SharedPreferences;

import

android.database.Cursor;

import

android.graphics.Bitmap;

import

android.graphics.BitmapFactory;

import

.Uri;

import

android.preference.PreferenceManager;

import

vider.DocumentsContract;

import

vider.MediaStore;

import

android.text.TextUtils;

import

java.io.ByteArrayInputStream;

import

java.io.ByteArrayOutputStream;

/**

*

Created

by

wbin

on

2016/3/22.

*/

public

class

ImgUtil

{

//4.4及以上系统使用这个方法处理图片

@TargetApi(19)

public

static

Bitmap

handleImageOnKitKat(Context

context,

Intent

data)

{

String

imagePath

=

null;

Uri

uri

=

data.getData();

if

(DocumentsContract.isDocumentUri(context,

uri))

{

//如果是document类型的Uri,则通过document

id处理

String

docId

=

DocumentsContract.getDocumentId(uri);

if

("viders.media.documents".equals(uri.getAuthority()))

{

String

id

=

docId.split(":")[1];

//解析出数字格式的id

String

selection

=

MediaStore.Images.Media._ID

+

"="

+

id;

imagePath

=

getImagePath(context,

MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

selection);

}

else

if

("viders.downloads.documents".equals(uri.getAuthority()))

{

Uri

contentUri

=

ContentUris.withAppendedId(

Uri.parse("content://downloads/public_downloads"),

Long.valueOf(docId));

imagePath

=

getImagePath(context,

contentUri,

null);

}

}

else

if

("content".equalsIgnoreCase(uri.getScheme()))

{

//如果不是document类型的Uri,则使用普通方式处理

imagePath

=

getImagePath(context,

uri,

null);

}

return

getImage(imagePath);

}

//4.4以下系统使用这个方法处理图片

public

static

Bitmap

handleImageBeforeKitKat(Context

context,

Intent

data)

{

Uri

uri

=

data.getData();

String

imagePath

=

getImagePath(context,

uri,

null);

return

getImage(imagePath);

}

public

static

String

getImagePath(Context

context,

Uri

uri,

String

selection)

{

String

path

=

null;

//通过Uri和selection来获取真实的图片路径

Cursor

cursor

=

context.getContentResolver().query(uri,

null,

selection,

null,

null);

if

(cursor

!=

null)

{

if

(cursor.moveToFirst())

{

path

=

cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));

}

cursor.close();

}

return

path;

}

//对bitmap进行质量压缩

public

static

Bitmap

compressImage(Bitmap

image)

{

ByteArrayOutputStream

baos

=

new

ByteArrayOutputStream();

press(Bitmap.CompressFormat.JPEG,

100,

baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

int

options

=

100;

while

(baos.toByteArray().length

/

1024

>

100)

{

//循环判断如果压缩后图片是否大于100kb,大于继续压缩

baos.reset();//重置baos即清空baos

press(Bitmap.CompressFormat.JPEG,

options,

baos);//这里压缩options%,把压缩后的数据存放到baos中

options

-=

10;//每次都减少10

}

ByteArrayInputStream

isBm

=

new

ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中

Bitmap

bitmap

=

BitmapFactory.decodeStream(isBm,

null,

null);//把ByteArrayInputStream数据生成图片

return

bitmap;

}

//传入图片路径,返回压缩后的bitmap

public

static

Bitmap

getImage(String

srcPath)

{

if

(TextUtils.isEmpty(srcPath))

//如果图片路径为空

直接返回

return

null;

BitmapFactory.Options

newOpts

=

new

Bit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论