热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android读取本地图库与调用摄像头拍摄

这篇文章主要为大家详细介绍了Android读取本地图库与调用摄像头拍摄,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文主要介绍如何读取Android本地图库的图片以及调用安卓的摄像头进行拍摄。

一、布局

布局比较简单,MainActviivty的布局文件只有两个按钮,一个是读取图库的,另一个是打开摄像头的,另外ResultActivity的布局只有一个ImageView,用于显示所选择的图片或者所拍摄的图片。

二、读取图库

由于需要打开安卓自带的图库,所以我们需要用到Intent这个类,主要用于不同Activity之间的通讯,代码如下:

//设置返回码:标识本地图库 
  private static final int RESULT_IMAGE=100; 
  //设置MIME码:表示image所有格式的文件均可 
  private static final String IMAGE_TYPE="image/*"; 
  //实例化Intent,传入ACTION_PICK,表示从Item中选取一个数据返回 
  Intent intent=new Intent(Intent.ACTION_PICK,null);  
  //设置Data和Type属性,前者是URI:表示系统图库的URI,后者是MIME码 
  intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,IMAGE_TYPE); 
  //启动这个intent所指向的Activity 
  startActivityForResult(intent,RESULT_IMAGE); 

三、摄像头拍摄照片

//设置返回码:标志照相机拍摄 
  private static final int RESULT_CAMERA=200; 
  //设置一个临时路径,保存所拍的照片 
  private static String TEMP_IMAGE_PATH; 
  //获取该路径 
  TEMP_IMAGE_PATH= Environment.getExternalStorageDirectory().getPath()+"/temp.png"; 
  //传入ACTION_IMAGE_CAPTURE:该action指向一个照相机app 
  Intent intent1=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
  //创建File并获取它的URI值 
  Uri photoUri=Uri.fromFile(new File(TEMP_IMAGE_PATH)); 
  //MediaStore.EXTRA_OUTPUT为字符串"output",即将该键值对放进intent中 
  intent1.putExtra(MediaStore.EXTRA_OUTPUT,photoUri); 
  startActivityForResult(intent1,RESULT_CAMERA); 

四、设置回调方法

由二、三的代码可知,由于运行了startActivityForResult()方法,所以我们设置一个回调方法,获取在其他应用中选择的数据:

@Override 
  protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode==RESULT_OK){ 
      if(requestCode==RESULT_IMAGE&&data!=null){ 
        //相册 
        //通过获取当前应用的contentResolver对象来查询返回的data数据 
        Cursor cursor=this.getContentResolver().query(data.getData(),null,null,null,null); 
        //将cursor指针移动到数据首行 
        cursor.moveToFirst(); 
        //获取字段名为_data的数据 
        String imagePath=cursor.getString(cursor.getColumnIndex("_data")); 
        //设置一个intent 
        Intent intent=new Intent(MainActivity.this,ResultActvity.class); 
        //传入所获取的图片的路径 
        intent.putExtra("mPicPath",imagePath); 
        //销毁cursor对象,释放资源 
        cursor.close(); 
        startActivity(intent); 
      }else if(requestCode==RESULT_CAMERA){ 
        //相机 
        Intent intent=new Intent(MainActivity.this,ResultActvity.class); 
        //由于拍照的时候设置了一个保存路径,所以直接放入该路径 
        intent.putExtra("mPicPath",TEMP_IMAGE_PATH); 
        startActivity(intent); 
      } 
    } 
  } 

五、展示图片

展示图片则比较简单,在新的Activity中获取intent中的路径,然后创建一个Bitmap,并设置为imageView即可,代码如下:

public class ResultActvity extends Activity { 
  private ImageView imageView; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.result); 
    imageView= (ImageView) findViewById(R.id.image); 
    Intent intent=getIntent(); 
    String picPath=intent.getStringExtra("mPicPath"); 
    Bitmap bitmap=BitmapFactory.decodeFile(picPath); 
    imageView.setImageBitmap(bitmap); 
 
  } 
} 

至此,一个读取本地图库与调用摄像头拍摄的demo已经完成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文介绍了两种有效的方法来检查Android应用是否拥有特定权限,如媒体读写权限(media_rw)。通过这些方法,开发者和安全人员可以更好地了解应用的行为,确保其不会滥用权限。 ... [详细]
  • 深入理解Kafka架构
    本文将详细介绍Kafka的内部工作机制,包括其工作流程、文件存储机制、生产者与消费者的具体实现,以及如何通过高效读写技术和Zookeeper支持来确保系统的高性能和稳定性。 ... [详细]
  • 本文介绍了如何使用 useradd 命令来创建用户及其相关组,以及如何通过指定参数来定制用户的属性,如UID、GID、家目录等。同时,也探讨了使用 userdel 命令安全地删除用户及其所有相关文件的方法。 ... [详细]
  • 请看|差别_Android 6.0 运行时权限处理解析
    请看|差别_Android 6.0 运行时权限处理解析 ... [详细]
  • 本文探讨了如何在Java后端配置CORS以支持或禁止携带凭证(如Cookie),并提供了前后端的具体实现方法。 ... [详细]
  • 将基于Web的互动多媒体体验引入手机和平板电脑历来面临诸多挑战,如性能瓶颈、API兼容性和HTML5音频及视频播放限制等问题。本文探讨了如何克服这些障碍,为《霍比特人:史矛革之战》打造了一个移动优先的沉浸式网络体验。 ... [详细]
  • 如何在Android手机上设置自定义闹钟铃声
    本文介绍了在Android设备上设置个性化闹钟铃声的具体步骤,包括创建必要的文件夹和调整系统设置。 ... [详细]
  • 本文详细介绍了如何在Android Studio中生成正式签名的APK文件,确保应用能够在Google Play等平台上顺利发布。文章还提供了相关的注意事项和常见问题解决方法。 ... [详细]
  • Mac系统下解决sh: ./configure: Permission denied错误的方法
    在Mac操作系统中,当尝试运行配置脚本时,可能会遇到权限被拒绝的错误提示。本文将详细解释这一问题的原因,并提供两种有效的解决方法。 ... [详细]
  • 第七次团队冲刺进展
    本次站立会议更新了项目进展,包括学生登录注册界面的初步实现和教师网页的设计优化。同时,我们对当前的任务进行了详细的讨论,并调整了后续的工作计划。 ... [详细]
  • 一个基于Android的库,提供了一个简洁且可定制的数字选择器,外观设计为计量表样式。 ... [详细]
  • Jenkins 安装指南:Windows 平台详解
    本文详细介绍了如何在Windows平台上安装和配置Jenkins,包括安装步骤、启动方法及基本的系统配置,旨在帮助初次使用者顺利搭建持续集成环境。 ... [详细]
  • 调料|信息源_MVI到底是不是凑数的?通过案例与MVVM进行比较
    调料|信息源_MVI到底是不是凑数的?通过案例与MVVM进行比较 ... [详细]
  • 在安装 CUDA Toolkit 时,系统会自动安装 NVIDIA 驱动。然而,这些默认的驱动可能不适合所有用户的硬件配置,因此有时需要手动安装特定版本的 NVIDIA 驱动。本文将详细介绍如何在 Ubuntu 14.04 系统上正确安装 NVIDIA 驱动和 CUDA Toolkit。 ... [详细]
  • 一年一度的“跳石头”竞赛即将拉开帷幕,赛事将在一条直线型的河流中举行,河流中散布着多个巨大的岩石。比赛的起点和终点已由组织方选定。在起点与终点之间,存在N个岩石(不包括起点和终点)。为了增加比赛的挑战性,组织方计划移除部分岩石,以使选手在比赛中的最小跳跃距离最大化。 ... [详细]
author-avatar
提着变形金刚的Oceannk_737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有