现在的App不可避免的要使用到手机的相机功能

首先我们先来介绍下最简单的一个实现方式,启动系统自带的Activity

上代码:

public void openCamera() {
        Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        path=getOutputMediaFile();
        i.putExtra(MediaStore.EXTRA_OUTPUT,path);//使用自定义的路径进行保存图片
        startActivityForResult(i,FLAG_CAMERA_RESULT);
    }
private Uri getOutputMediaFile(){ 
      File path
= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
      File file
=new File(path,"App_Note");
      if(!file.exists()){
          boolean flag= file.mkdirs();
       }
      String timestamp
=new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
      File mediaFile
=new File(file.getAbsolutePath()+File.separator+"img_"+timestamp+".jpg");
      return Uri.fromFile(mediaFile);
}
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(requestCode==FLAG_CAMERA_RESULT){
                if(resultCode==RESULT_OK){
                      Bitmap bitmap= BitmapFactory.decodeFile(path.getPath());
                    list.add(bitmap);
                    adapter.notifyDataSetChanged();
                }
            }else if(requestCode==FLAG_GALLERY_RESULT){
                if(resultCode==RESULT_OK){

                    try {
                          InputStream is= getContentResolver().openInputStream(data.getData());
                            Bitmap bitmap= BitmapFactory.decodeStream(is);
                            list.add(bitmap);
                            adapter.notifyDataSetChanged();

                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                    Log.i("com.loo",data.getData()+"");
                }

            }
    }

注意:

如果不设置MediaStore.EXTRA_OUTPUT,系统将会在默认的地址进行保存,并在onActivityResult的data数据中返回,

 Bitmap bm= (Bitmap) data.getExtras().get("data");//bitmap是被压缩过的

暂时不知道怎么获取存储的地址:试过使用data.getData()还是返回null。。。。。坑啊

如果设置了,返回的data即为NULL。

打开相册代码:

public  void openGallery(){
        Intent i=new Intent(Intent.ACTION_GET_CONTENT);
        i.setType("image/*");
        startActivityForResult(i,FLAG_GALLERY_RESULT);
    }

注意:一定要设置type,否则会报错。

 

posted on 2016-09-20 15:22  向着大牛奋斗  阅读(220)  评论(0编辑  收藏  举报