调用系统相册或相机工具类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用系统相册或相机工具类相关的知识,希望对你有一定的参考价值。
需求:点击修改头像,弹出对话框提示选择相册还是相机,从而调用系统相册或相机
import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.text.format.DateFormat; import android.view.View; import android.widget.Toast; import com.xuehu365.xuehu.model.Constant; import com.xuehu365.xuehu.ui.widget.AlertDialog; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Locale; /** * Created by Administrator on 2016/10/15. */ public class GetPhotoUtils { //相片来源类型 public static String touxiangType; //弹出选择相片来源对话框 public static void showDialog(final Context context) { AlertDialog alertDialog = new AlertDialog(context).builder(); alertDialog.setTitle("选择相片来源").setPositiveButton("相册", new View.OnClickListener() { @Override public void onClick(View v) { //调用相册 touxiangType = Constant.picture; Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); ((Activity) context).startActivityForResult(intent, Constant.IMAGE); } }).setNegativeButton("去照相", new View.OnClickListener() { @Override public void onClick(View v) { //调用照相机 touxiangType = Constant.photo; Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ((Activity) context).startActivityForResult(intent, Constant.IMAGE); } }).show(); } //回调加载图片 public static Bitmap setBitmap(int resultCode, Intent data, Context context) { //判断是来自相册还是相机 if (touxiangType.equals(Constant.photo)) { if (resultCode == Activity.RESULT_OK) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 return null; } new DateFormat(); String name = DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg"; Toast.makeText(context, name, Toast.LENGTH_LONG).show(); Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式 FileOutputStream b = null; File file = new File("/sdcard/Image/"); file.mkdirs();// 创建文件夹 String fileName = "/sdcard/Image/" + name; try { b = new FileOutputStream(fileName); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } return bitmap; } } else if (touxiangType.equals(Constant.picture)) { //获取图片路径 if (/*requestCode == Constant.IMAGE && */resultCode == Activity.RESULT_OK && data != null) { Uri selectedImage = data.getData(); String[] filePathColumns = {MediaStore.Images.Media.DATA}; Cursor c = context.getContentResolver().query(selectedImage, filePathColumns, null, null, null); c.moveToFirst(); int columnIndex = c.getColumnIndex(filePathColumns[0]); String imagePath = c.getString(columnIndex); Bitmap bitmap = BitmapUtils.getBitmap(imagePath, 240, 240); c.close(); return bitmap; } } return null; } }
以上是关于调用系统相册或相机工具类的主要内容,如果未能解决你的问题,请参考以下文章
NR - iOS / Android 相机/相册/日历/定位 等权限 检测+申请代码
NR - iOS / Android 相机/相册/日历/定位 等权限 检测+申请代码
NR - iOS / Android 相机/相册/日历/定位 等权限 检测+申请代码