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,如需转载请自行联系原作者




相关文章
|
2月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
309 4
|
3月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
241 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
2月前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
118 3
|
3月前
|
Web App开发 Android开发
利用firefox调试安卓手机端web
该教程详细介绍如何通过Firefox浏览器实现手机与电脑的远程调试。手机端需安装最新版Firefox,并按指定步骤设置完成;电脑端则需安装15版及以上Firefox。设置完成后,通过工具栏中的“远程调试”选项,输入手机IP地址即可连接。连接确认后,即可使用电脑端Firefox调试器调试手机上的Web信息。注意,调试前手机需提前打开目标网页。
138 2
|
3月前
|
Android开发 iOS开发 UED
安卓与iOS的较量:谁才是智能手机市场的王者?
本文将深入探讨安卓和iOS两大智能手机操作系统之间的竞争关系,分析它们各自的优势和劣势。通过对比两者在市场份额、用户体验、应用生态等方面的表现,我们将揭示出谁才是真正的市场领导者。无论你是安卓粉丝还是iOS忠实用户,这篇文章都将为你提供一些有趣的观点和见解。
|
5月前
|
Android开发
【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
【Azure 环境】记录使用Notification Hub,安卓手机收不到Push通知时的错误,Error_Code 30602 or 30608
|
5月前
|
Java Android开发 UED
安卓scheme_url调端:如果手机上多个app都注册了 http或者https 的 intent。 调端的时候,调起哪个app呢?
当多个Android应用注册了相同的URL Scheme(如http或https)时,系统会在尝试打开这类链接时展示一个选择对话框,让用户挑选偏好应用。若用户选择“始终”使用某个应用,则后续相同链接将直接由该应用处理,无需再次选择。本文以App A与App B为例,展示了如何在`AndroidManifest.xml`中配置对http与https的支持,并提供了从其他应用发起调用的示例代码。此外,还讨论了如何在系统设置中管理这些默认应用选择,以及建议开发者为避免冲突应注册更独特的Scheme。
|
Android开发
android通过代码判断手机是否root
只要/system/bin/su、/system/xbin/su这两个文件中有一个存在,就表明已经具有ROOT权限,如果两个都不存在,则不具有ROOT权限。   // 判断是否具有ROOT权限 public static boolean is_root(){ boo...
4021 0
Android--手机root获取与判断应用是否获取
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/81075850 import android.
1245 0

热门文章

最新文章