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

所属分类: 软件编程 / Android 阅读数: 68
收藏 0 赞 0 分享

本文主要介绍如何读取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样式和主题之选择器的实例讲解

今天小编就为大家分享一篇关于Android样式和主题之选择器的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Android应用动态修改主题的方法示例

今天小编就为大家分享一篇关于Android应用动态修改主题的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter 网络请求框架封装详解

这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Flutter倒计时/计时器的实现代码

这篇文章主要介绍了Flutter倒计时/计时器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android使用google breakpad捕获分析native cash

这篇文章主要介绍了Android使用google breakpad捕获分析native cash 的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Flutter WebView与JS互相调用简易指南

这篇文章主要介绍了详解Flutter WebView与JS互相调用简易指南,分为JS调用Flutter和Flutter调用JS,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android开发实现ListView和adapter配合显示图片和文字列表功能示例

这篇文章主要介绍了Android开发实现ListView和adapter配合显示图片和文字列表功能,涉及Android使用ListView结合adapter适配器实现图文显示功能相关的布局、解析、权限控制等操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android文字基线Baseline算法的使用讲解

今天小编就为大家分享一篇关于Android文字基线Baseline算法的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter自定义实现神奇动效的卡片切换视图的示例代码

这篇文章主要介绍了Flutter自定义实现神奇动效的卡片切换视图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现自定义滑动刻度尺方法示例

这篇文章主要给大家介绍了关于Android实现自定义滑动刻度尺的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多