安卓判断系统相机授权状态以及调用系统相机
来源:互联网 发布:电话亭女孩 知乎 编辑:程序博客网 时间:2024/06/06 11:40
1、在项目中有可能使用到系统的相机,以及根据授权状态做相应的处理,
2、在一开始我的项目里面没有判断相机的授权状态,直接就调用了系统的相机功能,但是当我拒绝了授权使用相机之后,项目仍然可以调用相机并且可以正常使用(如果是自定义打开相机的话,可能会崩掉),但是考虑到用户体验,还是需要判断一下授权状态,没有授权的话,就不用调用相机,下面是我的代码,在这里备份一下:
3、判断系统相机的授权状态和打开系统相机
/** * 启动相机,使用系统路径存储图片(不需要自定义路径,默认为Environment.DIRECTORY_PICTURES) * 返回存储路径 /storage/emulated/0/Pictures/1487908088865.jpg */ private String startCameraWithSystemPath(Activity activity, int requestCode) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { /* * @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_TAKE_PHOTO_PERMISSION) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //申请成功,可以拍照 } else { Toast.makeText(this, "CAMERA PERMISSION DENIED", Toast.LENGTH_SHORT).show(); } return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } * */ // 没有授权,可用申请授权或者提示信息 // 申请权限,REQUEST_CODE是自定义的常量,如果申请授权的话,需要重写上面的onRequestPermissionsResult方法,但是好像不怎么管用(没准确测试) // ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE); Log.d("111", "没有授权,请到应用设置界面手动打开权限"); return null; } else { // 已经权限 Log.d("111", "已经授权"); // 获得sd卡的状态信息 String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { // SDK可用 Intent intent = new Intent(); // 指定开启系统相机的Action intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); File publicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 获取系统SDK公共的文件夹路径 if (!publicDirectory.exists()) { publicDirectory.mkdirs(); } File saveFile = new File(publicDirectory, System.currentTimeMillis() + ".jpg"); // 拼接存储文件路径 // 把文件地址转换成Uri格式 Uri uri = Uri.fromFile(saveFile); Log.d("111", "getAbsolutePath=" + saveFile.getAbsolutePath()); // 设置系统相机拍摄照片完成后图片文件的存放地址 intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); // 此值在最低质量最小文件尺寸时是0,在最高质量最大文件尺寸时是1 intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); activity.startActivityForResult(intent, requestCode); return saveFile.getAbsolutePath(); // 返回绝对路径(系统路径) } else { // SDK不可用 Toast.makeText(activity, "请确认已经插入SD卡", Toast.LENGTH_LONG).show(); return null; } } }
调用方法获取图片的存储路径
private final static int REQUEST_CAMERA_CAPTURE_CODE = 3; // 相机回调codeprivate String cameraPath; // 存储路径// 调用cameraPath = startCameraWithSystemPath(MainActivity.this,REQUEST_CAMERA_CAPTURE_CODE); // 系统路径
REQUEST_CAMERA_CAPTURE_CODE是自己定义的一个常量,用于标示activity,在调用系统相机之后,可以在回调函数中获得图片路径:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // requestCode:可以通过resultCode来判断是哪一个activity的返回结果 if (resultCode == Activity.RESULT_OK) { if (requestCode == REQUEST_CAMERA_CAPTURE_CODE) { // 打开相机 Log.d("111", "path=" + cameraPath); Uri uri = Uri.fromFile(new File(cameraPath)); imageView.setImageURI(uri); } else if (requestCode == REQUEST_IMAGE_CAPTURE_CODE) { // 打开相册 try { Uri uri = data.getData(); String path = uri.getPath(); String last = uri.getLastPathSegment();// final String absolutePath= getAbsolutePath(mActivity, uri); Log.d("111", "uri=" + uri); Log.d("111", "path=" + path + ",last=" + last); imageView.setImageURI(uri); } catch (Exception e) { e.printStackTrace(); } } } }
4、打开系统相册,同样在 public void onActivityResult(int requestCode, int resultCode, Intent data) {}中回调
public final static int REQUEST_IMAGE_CAPTURE_CODE = 1; // 相册回调code// 调用startPhotoLibrary(REQUEST_IMAGE_CAPTURE_CODE); /* * 打开相册 * */ private void startPhotoLibrary(int requestCode) { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, requestCode); }
0 0
- 安卓判断系统相机授权状态以及调用系统相机
- 安卓相机之——调用系统相机
- 安卓调用系统相机三步走
- 安卓调用系统相机拍照
- 安卓调用系统图库和相机
- 安卓排除美颜相机等第三方相机直接调用系统相机处理方法
- 安卓排除美颜相机等第三方相机直接调用系统相机处理方法
- iOS判断应用是否获取到系统相机 相册的授权 以及如何请求授权
- 安卓调用系统相机,通过路径返回清晰图片
- WebView实现js调用安卓虚拟机的系统相机
- 关于调用系统相机以及压缩照片
- Android 调用系统相机以及相册源码
- Android 调用系统相机以及相册源码
- 安卓自定义相机拍照功能全解(不调用系统相机)
- 安卓自定义相机录像功能全解(不调用系统相机)
- Android 调用系统相机
- 调用系统相机 Android
- 调用系统相机
- ajax错误处理 net::ERR_CONNECTION_REFUSED
- 水仙花数
- OMXplayer
- UDP协议疑难杂症全景解析
- MySQL命令行导出导入数据库
- 安卓判断系统相机授权状态以及调用系统相机
- tomcat、apache、nginx之间的关系
- css之vertical-align
- HDU 1078(搜索)
- Tiled2Unity2D使用
- 功能强大的编辑器——Vi
- hdoj 3400 Line belt (三分嵌套搜索 )
- 版本管理+微建站+头条号接入-Zoomla!逐浪CMS2 x3.9.0发布
- Linux下Makefile的自动生成步骤