版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 门诊护理查房中的心理护理
- 食管异物与吞咽困难的护理
- 胃癌护理中的创新方法
- 肿瘤晚期患者家属心理支持
- 营造安全护理环境的重要性
- 臀位分娩的并发症预防
- 2026年幼儿园大班幼儿前书写能力发展观察
- 2026年课堂教学中的微课应用实践
- 2026年化工企业生产装置操作规程与维护保养制度
- 2026年小学综合实践课课堂氛围与效果评析
- 雨课堂学堂在线学堂云《自然辩证法概论( 武汉科技大)》单元测试考核答案
- 市场营销学(山东大学)智慧树知到期末考试答案章节答案2024年山东大学(威海)
- pwm控制的单相逆变电源系统设计LC滤波电路
- 锦州新兴橡胶制品有限公司清洁生产审核评估与验收报告
- 2022年10月上海申康医疗卫生建设工程公共服务中心招考3名工作人员2笔试参考题库含答案解析
- GB/T 7631.12-2014润滑剂、工业用油和有关产品(L类)的分类第12部分:Q组(有机热载体)
- 硅片加工硅片清洗课件
- 挡墙人工挖孔桩安全专项施工方案专家论证
- 二年级上册心理健康课件-我的情绪我做主 全国通用(共19张PPT)
- 完整word版,“吕氏八字命理学”高级理论
- 看台膜结构施工
评论
0/150
提交评论