调用系统图库和相机拍照再系统裁剪处理
这里需要先讲解一下Intent的一些用法:
Intent intent=Intent(String action, Uri uri),此方法的action可以传入系统定义好的action值:如启动相机,访问图库,启动裁剪等动作,uri为对应动作要访问到的资源,如某张照片的uri,或者整个系统图库的uri Intent.setDataAndType(Uri data, String type),此方法是设置访问资源的类型,如访问某张图片,可以设置data为这张图片的uri,type指定这张图片的类型
Intent intent = new Intent(Intent.ACTION _PICK, MediaStore.Images .Media .EXTERNAL _CONTENT_URI)
startActivityForResult(intent, 1 )
Intent intent1=new Intent(MediaStore.ACTION _IMAGE_CAPTURE)
Uri uri=Uri.fromFile (new File(Environment.getExternalStorageDirectory ()+"/temp.jpg" ))
//设置照片拍摄后的输出路径
intent1.putExtra (MediaStore.EXTRA _OUTPUT,uri)
startActivityForResult(intent1,2 )
onActivityResult中处理返回结果,requestcode为1处理图库返回的结果,2处理裁剪返回的结果,3处理相机返回的结果
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
super .onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
Uri uri = data.getData();
Cursor cursor = getContentResolver().query(uri, null , null , null , null );
if (cursor != null && cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
Log.i("path" , path);
Intent intent = new Intent("com.android.camera.action.CROP" );
intent.setDataAndType(uri, "image/*" );
intent.putExtra("aspectX" , 1 );
intent.putExtra("aspectY" , 1 );
intent.putExtra("outputX" , 300 );
intent.putExtra("outputY" , 300 );
intent.putExtra("return-data" , true );
startActivityForResult(intent, 2 );
}
}else if (requestCode==2 &&resultCode==RESULT_OK){
Bitmap bitmap = data.getParcelableExtra("data" );
String filename=path.substring(path.lastIndexOf("/" )+1 );
Log.i("path-file" ,filename);
File file=bitmapToFile(bitmap,filename);
uploadHead(file);
iv_head.setImageBitmap(bitmap);
}else if (requestCode==3 &&resultCode==Rog.i("path" ,uriPath.toString());
/**
Bundle bundle=data.getExtras();
Bitmap bitmap=(Bitmap)bundle.get("data");
Uri uriPath=null;
if(data.getData()!=null){
uriPath=data.getData();
}else {
uriPath=Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(),bitmap,null,null));
}
Log.i("path",uriPath.toString());
**/
File file=new File(Environment.getExternalStorageDirectory()+"/temp.jpg" );
Uri uriPath=Uri.fromFile(file);
path=Environment.getExternalStorageDirectory()+"/temp.jpg" ;
Intent intent = new Intent("com.android.camera.action.CROP" );
intent.setDataAndType(uriPath, "image/*" );
intent.putExtra("aspectX" , 1 );
intent.putExtra("aspectY" , 1 );
intent.putExtra("outputX" , 300 );
intent.putExtra("outputY" , 300 );
intent.putExtra("return-data" , true );
startActivityForResult(intent, 2 );
}
}