关于Android项目相机使用(一)-------相机调用

调用系统相机首先在android项目中需要在AndroidManifest.xml中申明,即就是注册相机功能,因为在android的规定中调用硬件中的API需要先声明对这个API的调用当然也需要相关权限的获取。

 //AndroidManifest.xml文件内容
<uses-permission android:name="android.permission.CAMERA" />
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 注册相机功能,在别的程序Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);进行启动相机时也会选择是否启动该应用 -->
<intent-filter>
    <action android:name="android.media.action.IMAGE_CAPTURE" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

声明注册相机功能后,需要在你需要调用相机功能的activity中启用动态权限申请,也就是一般手机调用申请权限的步骤

//以下为onCreate方法下内容
//REQUEST_GPS为自定义int型静态常量;private final int REQUEST_GPS = 1;
//申请动态权限,这里的权限申请绑定在了全局控件
    ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.CAMERA,
                    Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS}
     , REQUEST_GPS);
// 以下为自定义方法
// 拍照并显示图片
private void openCamera_1() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动系统相机
    startActivityForResult(intent, REQUEST_CAMERA_1);
}
//以下为onactivity内的内容
if (requestCode == REQUEST_CAMERA_1) { // 判断请求码是否为REQUEST_CAMERA,如果是代表是这个页面传过去的,需要进行获取
    Bundle bundle = data.getExtras(); // 从data中取出传递回来缩略图的信息,图片质量差,适合传递小图片
    Bitmap bitmap = (Bitmap) bundle.get("data"); // 将data中的信息流解析为Bitmap类型
    saveImageToGallery(bitmap);
    ivShowPicture.setImageBitmap(bitmap);// 显示图片
    StartView.setVisibility(View.GONE);
    OperateView.setVisibility(View.VISIBLE);
}

上部分代码分解来看:

//以下为onCreate方法下内容
//REQUEST_GPS为自定义int型静态常量;private final int REQUEST_GPS = 1;
//申请动态权限,这里的权限申请绑定在了全局控件
    ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.CAMERA,
                    Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS}
     , REQUEST_GPS);

在Oncreate方法里写入上述代码,Oncreate代码会在该activity运行时直接执行这里的动态权限申请,上述代码分别申请了:读写外部存储,相机调用,文件操作的权限

这里需要解释一下(REQUEST_GPS)设置逻辑,这里相当于该项目的权限申请唯一标识,也就是说在其他activity需要调用权限申请的时候仅需要更改这个唯一标识的值即可

// 拍照并显示图片
private void openCamera_1() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动系统相机
    startActivityForResult(intent, REQUEST_CAMERA_1);
}

此为自定义函数,声明一个intent并启动硬件设备(Android设备)的系统相机,并开启回写

//以下为onactivity内的内容
if (requestCode == REQUEST_CAMERA_1) { // 判断请求码是否为REQUEST_CAMERA,如果是代表是这个页面传过去的,需要进行获取
    Bundle bundle = data.getExtras(); // 从data中取出传递回来缩略图的信息,图片质量差,适合传递小图片
    Bitmap bitmap = (Bitmap) bundle.get("data"); // 将data中的信息流解析为Bitmap类型
    saveImageToGallery(bitmap);
    ivShowPicture.setImageBitmap(bitmap);// 显示图片
    StartView.setVisibility(View.GONE);
    OperateView.setVisibility(View.VISIBLE);
}

对应上边的自定义函数的requestCode值,在完成相机操作后,会进入这个判断框,可以看到这里使用Bundle来接受数据,这里的ivShowPicture.setImageBitmap(bitmap);// 显示图片

就是对刚刚处理过后的数据进行展示,而ivShowPicture是一个Imageview用来接受图片信息的变量

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hersiman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值