现在的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,否则会报错。