Android Demo:读取本地图库与调用摄像头拍摄

本文主要介绍如何读取Android本地图库的图片以及调用安卓的摄像头进行拍摄。


一、布局

布局比较简单,MainActviivty的布局文件只有两个按钮,一个是读取图库的,另一个是打开摄像头的,另外ResultActivity的布局只有一个ImageView,用于显示所选择的图片或者所拍摄的图片。


二、读取图库

由于需要打开安卓自带的图库,所以我们需要用到Intent这个类,主要用于不同Activity之间的通讯,代码如下:

//设置返回码:标识本地图库
    private static final int RESULT_IMAGE=100;
    //设置MIME码:表示image所有格式的文件均可
    private static final String IMAGE_TYPE="image/*";
    //实例化Intent,传入ACTION_PICK,表示从Item中选取一个数据返回
    Intent intent=new Intent(Intent.ACTION_PICK,null); 
    //设置Data和Type属性,前者是URI:表示系统图库的URI,后者是MIME码
    intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,IMAGE_TYPE);
    //启动这个intent所指向的Activity
    startActivityForResult(intent,RESULT_IMAGE);

、摄像头拍摄照片

//设置返回码:标志照相机拍摄
    private static final int RESULT_CAMERA=200;
    //设置一个临时路径,保存所拍的照片
    private static String TEMP_IMAGE_PATH;
    //获取该路径
    TEMP_IMAGE_PATH= Environment.getExternalStorageDirectory().getPath()+"/temp.png";
    //传入ACTION_IMAGE_CAPTURE:该action指向一个照相机app
    Intent intent1=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //创建File并获取它的URI值
    Uri photoUri=Uri.fromFile(new File(TEMP_IMAGE_PATH));
    //MediaStore.EXTRA_OUTPUT为字符串"output",即将该键值对放进intent中
    intent1.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);
    startActivityForResult(intent1,RESULT_CAMERA);

四、设置回调方法

由二、三的代码可知,由于运行了startActivityForResult()方法,所以我们设置一个回调方法,获取在其他应用中选择的数据:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==RESULT_OK){
            if(requestCode==RESULT_IMAGE&&data!=null){
                //相册
                //通过获取当前应用的contentResolver对象来查询返回的data数据
                Cursor cursor=this.getContentResolver().query(data.getData(),null,null,null,null);
                //将cursor指针移动到数据首行
                cursor.moveToFirst();
                //获取字段名为_data的数据
                String imagePath=cursor.getString(cursor.getColumnIndex("_data"));
                //设置一个intent
                Intent intent=new Intent(MainActivity.this,ResultActvity.class);
                //传入所获取的图片的路径
                intent.putExtra("mPicPath",imagePath);
                //销毁cursor对象,释放资源
                cursor.close();
                startActivity(intent);
            }else if(requestCode==RESULT_CAMERA){
                //相机
                Intent intent=new Intent(MainActivity.this,ResultActvity.class);
                //由于拍照的时候设置了一个保存路径,所以直接放入该路径
                intent.putExtra("mPicPath",TEMP_IMAGE_PATH);
                startActivity(intent);
            }
        }
    }

五、展示图片

展示图片则比较简单,在新的Activity中获取intent中的路径,然后创建一个Bitmap,并设置为imageView即可,代码如下:

public class ResultActvity extends Activity {
    private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        imageView= (ImageView) findViewById(R.id.image);
        Intent intent=getIntent();
        String picPath=intent.getStringExtra("mPicPath");
        Bitmap bitmap=BitmapFactory.decodeFile(picPath);
        imageView.setImageBitmap(bitmap);

    }
}

至此,一个读取本地图库与调用摄像头拍摄的demo已经完成。



参考资料:《安卓群英传》,徐宜生,2015.9第一版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值