【移动应用开发技术】Android工具类ImgUtil选择相机和系统相册的示例分析_第1页
【移动应用开发技术】Android工具类ImgUtil选择相机和系统相册的示例分析_第2页
【移动应用开发技术】Android工具类ImgUtil选择相机和系统相册的示例分析_第3页
【移动应用开发技术】Android工具类ImgUtil选择相机和系统相册的示例分析_第4页
【移动应用开发技术】Android工具类ImgUtil选择相机和系统相册的示例分析_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

【移动应用开发技术】Android工具类ImgUtil选择相机和系统相册的示例分析

说明:代码:package

com.gxjl.pe.gxjlpesdk.util;

import

android.Manifest;

import

android.app.Activity;

import

android.app.ActivityManager;

import

android.app.AlertDialog;

import

android.content.Context;

import

android.content.DialogInterface;

import

android.content.Intent;

import

android.content.pm.PackageManager;

import

android.graphics.Bitmap;

import

.Uri;

import

android.os.Build;

import

vider.MediaStore;

import

android.support.v4.app.ActivityCompat;

import

android.support.v4.content.ContextCompat;

import

android.support.v4.content.FileProvider;

import

android.widget.Toast;

import

java.io.ByteArrayOutputStream;

import

java.io.File;

import

java.io.IOException;

import

java.util.ArrayList;

import

java.util.List;

/**

*

图片工具类

*

Created

by

xiaoshuai

on

2018/8/17.

*/

public

class

ImgUtil

{

public

static

final

int

TAKE_PHOTO

=

1;//拍照

public

static

final

int

CHOOSE_PHOTO

=

2;//选择相册

public

static

final

int

REQUEST_CODE_CAMERA

=

3;//相机权限请求

public

static

final

int

REQUEST_CODE_ALBUM

=

4;//相册权限请求

public

static

Uri

imageUri;//相机拍照图片保存地址

/**

*

选择图片,从图库、相机

*

*

@param

activity

上下文

*/

public

static

void

choicePhoto(final

Activity

activity)

{

//采用的是系统Dialog作为选择弹框

new

AlertDialog.Builder(activity).setTitle("上传头像")//设置对话框标题

.setPositiveButton("拍照",

new

DialogInterface.OnClickListener()

{//添加确定按钮

@Override

public

void

onClick(DialogInterface

dialog,

int

which)

{

if

(Build.VERSION.SDK_INT

>=

23)

{//检查相机权限

ArrayList<String>

permissions

=

new

ArrayList<>();

if

(activity.checkSelfPermission(Manifest.permission.CAMERA)

!=

PackageManager.PERMISSION_GRANTED)

{

permissions.add(Manifest.permission.CAMERA);

}

if

(permissions.size()

==

0)

{//有权限,跳转

//打开相机-兼容7.0

openCamera(activity);

}

else

{

activity.requestPermissions(permissions.toArray(new

String[permissions.size()]),

REQUEST_CODE_CAMERA);

}

}

else

{

//打开相机-兼容7.0

openCamera(activity);

}

}

}).

setNegativeButton("系统相册",

new

DialogInterface.OnClickListener()

{

@Override

public

void

onClick(DialogInterface

dialog,

int

which)

{

//如果有权限申请,请在Activity中onRequestPermissionsResult权限返回里面重新调用openAlbum()

if

(ContextCompat.checkSelfPermission(activity,

Manifest.permission.WRITE_EXTERNAL_STORAGE)

!=

PackageManager.PERMISSION_GRANTED)

{

ActivityCompat.requestPermissions(activity,

new

String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},

REQUEST_CODE_ALBUM);

}

else

{

openAlbum(activity);

}

}

}).show();//在按键响应事件中显示此对话框

}

/**

*

打开相机

*

兼容7.0

*

*

@param

activity

*/

public

static

void

openCamera(Activity

activity)

{

//

创建File对象,用于存储拍照后的图片

File

outputImage

=

new

File(activity.getExternalCacheDir(),

"output_image.jpg");

try

{

if

(outputImage.exists())

{

outputImage.delete();

}

outputImage.createNewFile();

}

catch

(IOException

e)

{

e.printStackTrace();

}

if

(Build.VERSION.SDK_INT

<

24)

{

imageUri

=

Uri.fromFile(outputImage);

}

else

{

//Android

7.0系统开始

使用本地真实的Uri路径不安全,使用FileProvider封装共享Uri

//参数二:fileprovider绝对路径

com.dyb.testcamerademo:项目包名

imageUri

=

FileProvider.getUriForFile(activity,

"com.mandaotech.ewallet.fileprovider",

outputImage);

}

//

启动相机程序

Intent

intent

=

new

Intent("android.media.action.IMAGE_CAPTURE");

intent.putExtra(MediaStore.EXTRA_OUTPUT,

imageUri);

activity.startActivityForResult(intent,

TAKE_PHOTO);

}

/**

*

打开图库

*

@param

activity

*/

public

static

void

openAlbum(Activity

activity)

{

//调用系统图库的意图

Intent

choosePicIntent

=

new

Intent(Intent.ACTION_PICK,

null);

choosePicIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

"image/*");

activity.startActivityForResult(choosePicIntent,

CHOOSE_PHOTO);

//打开系统默认的软件

//Intent

intent

=

new

Intent("ent.action.GET_CONTENT");

//intent.setType("image/*");

//activity.startActivityForResult(intent,

CHOOSE_PHOTO);

//

打开相册

}

/**

*

得到byte[]

*

这里对传入的图片Uri压缩到1M以内,并转换为byte[]后返回

*

*

@param

activity

上下文

*

@param

uri

传入图片的Uri

*

@return

byte[]

*/

public

static

byte[]

getImgByteFromUri(Activity

activity,

Uri

uri)

throws

IOException

{

Bitmap

bitmap

=

MediaStore.Images.Media.getBitmap(activity.getContentResolver(),

uri);

ByteArrayOutputStream

out

=

new

ByteArrayOutputStream();

press(Bitmap.CompressFormat.PNG,

100,

out);//100表示不压缩,直接放到out里面

int

options

=

90;//压缩比例

while

(out.toByteArray().length

/

1024

>

200)

{

//

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

out.reset();

//

重置baos即清空baos

press(Bitmap.CompressFormat.JPEG,

options,

out);//

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

options

-=

10;//

每次都减少10

}

byte[]

bs

=

out.toByteArray();

return

bs;

}

}@Override

public

void

onRequestPermissionsResult(int

requestCode,

String[]

permissions,

int[]

grantResults)

{

switch

(requestCode)

{

case

REQUEST_CODE_ALBUM://相册存储权限

if

(grantResults.length

>

0

&&

grantResults[0]

==

PackageManager.PERMISSION_GRANTED)

{

ImgUtil.openAlbum(this);

}

else

{

UiUtil.showToast(this,

"选择图库需要同意权限");

}

break;

case

REQUEST_CODE_CAMERA://相机拍照权限

if

(grantResults[0]

==

PackageManager.PERMISSION_GRANTED)

{//允许

ImgUtil.openCamera(OcrHandReviewActivity.this);

}

else

{//拒绝

UiUtil.showToast(this,

"只有同意相机权限,才能使用扫码功能");

}

break;

default:

}

}//相机、相册、剪切

返回

@Override

public

void

onActivityResult(int

requestCode,

int

resultCode,

Intent

data)

{

//正确返回

if

(resultCode

==

RESULT_OK)

{

switch

(requestCode)

{

case

ImgUtil.TAKE_PHOTO://相机返回

Log.e("返回相机",

ImgUtil.imageUri.toString());

GlideApp.with(ElecIdPAActivity.this)

.load(ImgUtil.imageUri)

.skipMemoryCache(true)

.diskCacheStrategy(

DiskCacheStrategy.NONE

)

.into(iv_zhengmain_photo);

break;

case

ImgUtil.CHOOSE_PHOTO://相册返回

try

{

if

(data

!=

null)

{

//相册返回

Uri

uri

=

data.getData();

Log.e("返回相册",

uri.toString());

GlideApp.with(ElecIdPAActivity.this)

.load(uri)

.skipMemoryCache(true)

.diskCacheStrategy(

DiskCacheStrategy.NONE

)

.into(iv_zhengmain_photo);

}

}

catch

(Exception

e)

{

e.printStackTrace();

UiUtil.showToast(this,

"图片选择失败");

}

break;

}

}

else

{

UiUtil.showToast(this,

"图片选择失败");

}

}<!--获取sd卡写的权限,用于文件上传和下载-->

<uses-permission

android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission

android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<!--允许读取手机状态-->

<uses-permission

android:name="android.permission.READ_PHONE_STATE"/>

<!--

相机权限

-->

<uses-permission

android:name="

温馨提示

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

评论

0/150

提交评论