调用系统相册或相机工具类

需求:点击修改头像,弹出对话框提示选择相册还是相机,从而调用系统相册或相机

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;
    }
}
时间: 2024-10-15 11:55:01

调用系统相册或相机工具类的相关文章

Android调用系统相册和相机选择图片并显示在imageview中

Android调用系统相册和相机选择图片并显示在imageview中,在系统调用相机拍摄中,直接返回的是经过压缩处理后的图像,当你直接把返还后的图片放在imageview中时 图片就会非常的模糊,所以要经过先存放在sd中,然后在处理并显示.当调用系统相册时,因为Android系统从4.4版本以后系统不再返回真实的uri路径,而是封装过后的uri路径,所以当你写代码时必须注意,4.4是一个分水岭,4.4以上的版本必须就通过解析和相应的处理才能获取到真实的uri路径. 先上程序运行的结果. 这个是调

Swift—调用系统相册和相机

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Menlo; color: #000000; min-height: 28.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Menlo; color: #294c50 }

iOS调用系统相册、相机 显示中文标题

最近做头像上传功能需要使用系统相册.相机,在调用系统相册.相机发现是英文的系统相簿界面后标题显示"photos",但是手机语言已经设置显示中文,纠结半天,最终在info.plist设置解决问题. 发现在项目的info.plist里面添加Localized resources can be mixed YES(表示是否允许应用程序获取框架库内语言)即可解决这个问题.特此记录下以便以后查看和别人解决问题

Android图片系列(1)-------调用系统相册与相机获取图片

Android开发过程中,我们经常需要获取图片,你可以通过获取手机相册的图片,也可以调用相机拍照获取图片.这里主要讲这两个获取图片的方式,并记录其中遇到的小问题. 调用相册获取图片 这个功能非常简单,这里不多说了,这里贴出关键代码 Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT); openAlbumIntent.setType("image/*"); startActivityForResult(openAl

Android 调用系统相机拍照保存以及调用系统相册的方法

系统已经有的东西,如果我们没有新的需求的话,直接调用是最直接的.下面讲讲调用系统相机拍照并保存图片和如何调用系统相册的方法. 首先看看调用系统相机的核心方法: Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(camera, CAMERA); 相机返回的数据通过下面的回调方法取得,并处理: public static final int CAMERA  = 0x01; @Over

android 调用系统相机获取图片、调用系统相册获取图片,并对图片进行截取

打开系统相册获取图片并截取,代码相对简单 1 Intent intent = new Intent(Intent.ACTION_GET_CONTENT,null); 2 intent.setType("image/*"); 3 intent.putExtra("crop", "true"); 4 5 //WIDTH 和 HEIGHT指的是截取框的宽高比例,如设WIDTH = 1,HEIGHT = 1,截取框就为正方形 6 intent.putEx

安卓 调用系统相册并裁剪

上一篇写了关于调用系统相机并裁剪,这一片写关于调用系统相册裁剪照片 btn_album.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent; logoTempPath = LOGO_BASE_PATH + System.currentTimeMillis() + ".png"; intent = new Intent(Intent.ACTION_

调用系统相册

import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.v7.app.AppCompatA

系统内存信息获取工具类

/** * 得到系统内存信息的工具类 * @author zwenkai */ public class SystemInfoUtils { /** * 得到运行的进程总个数 * * @param context * @return 运行进程个数 */ public static int getRunningProcessCount(Context context) { ActivityManager am = (ActivityManager) context.getSystemService