Android调用手机拍照以及从相册选择照片

该功能主要实现上传图片到服务器,选择图片的方式有两种,一种是从手机相册中选择,另一种是调用手机摄像头拍照。如图:

 

Android调用手机拍照以及从相册选择照片 

 


  1. Java 代码复制内容到剪贴板  
  2.       
  3. /*用来标识请求照相功能的activity*/          
  4. private static final int CAMERA_WITH_DATA = 1001;          
  5. /*用来标识请求gallery的activity*/          
  6. private static final int PHOTO_PICKED_WITH_DATA = 1002;    

 


  1. Java 代码复制内容到剪贴板  
  2.       
  3. private Bitmap bitMap;       //用来保存图片        
  4. private boolean hasImage;    //是否已经选择了图片    

 


  1. Java 代码复制内容到剪贴板  
  2.       
  3. /**       
  4.      * 拍照获取图片       
  5.      *        
  6.      */        
  7.     protected void doTakePhoto() {        
  8.         try {        
  9.             Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        
  10.             startActivityForResult(cameraIntent, CAMERA_WITH_DATA);        
  11.         } catch (ActivityNotFoundException e) {        
  12.             e.printStackTrace();        
  13.         }        
  14.     }        
  15.             
  16.     /**       
  17.      * 从本地手机中选择图片       
  18.      */        
  19.     private void doSelectImageFromLoacal(){        
  20.         Intent localIntent = new Intent();        
  21.         localIntent.setType("image/*");        
  22.         localIntent.setAction("android.intent.action.GET_CONTENT");        
  23.         Intent localIntent2 = Intent.createChooser(localIntent, "选择图片");        
  24.         startActivityForResult(localIntent2, PHOTO_PICKED_WITH_DATA);        
  25.     }    

然后需要重写onActivityResult()方法,判断是否那种方式获取的图片。

 

 


  1. Java 代码复制内容到剪贴板  
  2.       
  3. protected void onActivityResult(int requestCode, int resultCode, Intent data) {        
  4.         if (resultCode != RESULT_OK)        
  5.             return;        
  6.         switch (requestCode) {        
  7.         case PHOTO_PICKED_WITH_DATA: //从本地选择图片        
  8.             if (bitMap != null && !bitMap.isRecycled()) {        
  9.                 bitMap.recycle();        
  10.             }        
  11.             Uri selectedImageUri = data.getData();        
  12.             if(selectedImageUri != null){        
  13.                 try {        
  14.                     bitMap = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri));        
  15.                 } catch (FileNotFoundException e) {        
  16.                     e.printStackTrace();        
  17.                 }        
  18.                 //下面这两句是对图片按照一定的比例缩放,这样就可以完美地显示出来。有关图片的处理将重新写文章来介绍。      
  19.                 int scale = ImageThumbnail.reckonThumbnail(bitMap.getWidth(), bitMap.getHeight(), 500600);        
  20.                 bitMap = ImageThumbnail.PicZoom(bitMap, (int) (bitMap.getWidth() / scale), (int) (bitMap.getHeight() / scale));        
  21.                 imageView.setImageBitmap(bitMap);        
  22.                 imageView.setVisibility(View.VISIBLE);        
  23.                 hasImage = true;        
  24.             }        
  25.             break;        
  26.         case CAMERA_WITH_DATA:  //拍照        
  27.             Bundle bundle = data.getExtras();        
  28.             bitMap = (Bitmap)bundle.get("data");        
  29.             if (bitMap != null)        
  30.                 bitMap.recycle();        
  31.             bitMap = (Bitmap) data.getExtras().get("data");        
  32.             int scale = ImageThumbnail.reckonThumbnail(bitMap.getWidth(), bitMap.getHeight(), 500600);        
  33.             bitMap = ImageThumbnail.PicZoom(bitMap, (int) (bitMap.getWidth() / scale), (int) (bitMap.getHeight() / scale));        
  34.             imageView.setImageBitmap(bitMap);        
  35.             imageView.setVisibility(View.VISIBLE);        
  36.             hasImage = true;        
  37.             break;        
  38.         }        
  39.     }        
  40.         
  41.       

 




     本文转自06peng 51CTO博客,原文链接:http://blog.51cto.com/06peng/962497,如需转载请自行联系原作者




上一篇:C#RSA加密解密签名类,支持PEM格式解密(1024或2048位)


下一篇:Jenkins基础--Windows批处理,PowerShell获取指定的Credentials账户信息