拍照
private Uri imgUri;
private static final int TAKE_PHOTO=1;
File outputImage=new File(getExternalCacheDir(),"output_iamge.jpg");
try{
if(outputImage.exists()){
outputImage.delete();
}
outputImage.createNewFile();
}catch(IOException e){
e.printStackTrace();
}
if(Build.VERSION.SDK_INT>Build.VERSION_CODES>N){
imgUri=FileProvider.getUriForFile(this,"packagename.fileprovider",outputImage)
}else{
imgUri=Uri.fromUri(outputImage);
}
Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,imgUri);
startActivityForResult(intent,TAKE_PHOTO);
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(requestCode){
case:TAKE_PHOTO:{
if(resultCode==RESULT_OK){
try{
Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(imgUri));
}
}
}break;
default:break;
}
}
从图库读取图片
public static final int CHOOSE_PHOTO=2;
if(ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermission(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else{
openAlbum();
}
@Override
public void onRequestPermissionResult(int requestCode,@NonNull String[] permissions,@NonNull int grantResults ){
switch(requestCode){
case 1:{
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
openAlbum();
}else{
Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show();
}
}break;
}
}
/**
*启动打开图库
*/
public void openAlbum(){
Intent intent=new Intent("android.intent.action.GET_CONTENT");
intent.setType("image/*");
startActivityForResult(intent,CHOOSE_PHOTO);
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(requestCode){
if(resultCode=RESULT_OK){
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT){
handleImageOnKitKat(data);
}else{
handleImageBeforeKitkat(data);
}
}
}
}
@TargetApi(19)
private void handleImageOnKitkat(Intent data){
String imgPath=null;
Uri uri=data.getData();
if(DocumentContract.isDocumentUri(this,uri)){
String documentId=DocumentContract.getDocumentId(uri);
if("com.android.providers.media.documents".equals(uri.getAuthority())){
String id=documentId.split(":")[1];
String selection=MediaStore.Images.Media._ID+"="+id;
imagePath=getImagePath(MeidaStore.Images.Media.EXTERNAL_CONTENT_URI,selection);
}else if("com.android.providers.downloads.documents".equals(uri.getAuthority())){
Uri contentUri=ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),Long.valueOf(documentId));
imagePath=getImagePath(contentUri,null);
}
}else if("content".equalsIgnoreCase(uri.getScheme())){
imagePath=getImagePath(contentUri,null);
}else if("file".equalsIgnoreCase(uri.getScheme())){
imagePath=uri.getPath();
}
displayImage(imagePath);
}
private void handleImageBeforeKitkat(Intent data){
Uri uri=data.getData();
String imagePath=getImagePath(uri,null);
displayImage(imagePath);
}
private void getImagePath(Uri uri,String selection){
String path=null;
Cursor cursor=getContentResolver().query(uri,null,selection,null,null);
if(cursor!=null){
if(cursor.moveToFirst()){
path=cursor.getString(cursor.getColumnIndex(MediaStore.Iamges.Media.DATA));
}
cursor.close();
}
return path;
}
private void displayImage(String imagePath){
if(imagePath!=null){
Bitmap bitmap=BitmapFactory.decodeFile(imagePath);
}else{
Toast.makeText(this,"failed to get image",Toast.LENGTH_SHORT).show();
}
}