Android从相册、照相机选择图片(支持4.4+,KIKAT以上)

2024-01-24 01:58

本文主要是介绍Android从相册、照相机选择图片(支持4.4+,KIKAT以上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发都会遇到从手机的相册和照相机选择图片的功能,下面是一段通用的代码,用来选择手机中的图片,以后用的时候,直接调用就可以了。


使用到的类属性

public final static int CONSULT_DOC_PICTURE = 1000;
public final static int CONSULT_DOC_CAMERA = 1001;
private int SELECT_PICTURE = 0;
private int SELECT_CAMERA = 1;
private Bitmap bmp;
private Uri outputFileUri;
//从相册或照相机选择出的文件,可以用来判断是否上传
File selectImg;

弹出选择对话框

protected void createSelectImageDialog() {CharSequence[] items = { "相册", "照相机" };new AlertDialog.Builder(this).setTitle("选择图片来源").setItems(items, new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {if (which == SELECT_PICTURE) {Intent intent = new Intent();if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {intent.setAction(Intent.ACTION_GET_CONTENT);}else {intent.setAction(Intent.ACTION_OPEN_DOCUMENT);intent.addCategory(Intent.CATEGORY_OPENABLE);}intent.setType("image/*");startActivityForResult(Intent.createChooser(intent, "选择图片"), CONSULT_DOC_PICTURE);} else {File file = new File(Environment.getExternalStorageDirectory(), "avator.jpg");outputFileUri = Uri.fromFile(file);Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);startActivityForResult(intent, CONSULT_DOC_CAMERA);}}}).create().show();}

获取返回的数据,因为使用的不是return-data,所以返回的是uri需要自己去查询一下真实路径

 @SuppressLint("NewApi")protected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == CONSULT_DOC_PICTURE) {if(data == null){return;}if (bmp != null)// 如果不释放的话,不断取图片,将会内存不够bmp.recycle();if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT){Uri contentUri = data.getData();String wholeID = DocumentsContract.getDocumentId(contentUri);String id = wholeID.split(":")[1];String[] column = { MediaStore.Images.Media.DATA };String sel = MediaStore.Images.Media._ID + "=?";Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column,sel, new String[] { id }, null);int columnIndex = cursor.getColumnIndex(column[0]);if (cursor.moveToFirst()) {String path = cursor.getString(columnIndex);bmp = BitmapFactory.decodeFile(path);avator.setImageBitmap(bmp);selectImg = new File(path);}cursor.close();}else{Uri uri = data.getData();String[] proj = { MediaStore.Images.Media.DATA };Cursor cursor = this.getContentResolver().query(uri, proj, // Whichnull, // WHERE clause; which rows to return (all rows)null, // WHERE clause selection arguments (none)null); // Order-by clause (ascending by name)int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();String path = cursor.getString(column_index);bmp = BitmapFactory.decodeFile(path);avator.setImageBitmap(bmp);selectImg = new File(path);cursor.close();}} else if (requestCode == CONSULT_DOC_CAMERA) {bmp = BitmapFactory.decodeFile(outputFileUri.getPath());avator.setImageBitmap(bmp);selectImg = new File(outputFileUri.getPath());} else {Toast.makeText(this, "请重新选择图片", Toast.LENGTH_SHORT).show();}}  

调用的时候只需要在触发事件中 直接调用createSelectImageDialog方法

选择出来的图片是原始图片,图片很大,不适于上传功能

这篇关于Android从相册、照相机选择图片(支持4.4+,KIKAT以上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638207

相关文章

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按