当前位置:   article > 正文

7.0通过Intent调用系统相机(包含动态权限)_set intent 取获取摄像头权限

set intent 取获取摄像头权限

官方的解决方案:https://developer.android.google.cn/training/secure-file-sharing/setup-sharing.html

步骤1:

在AndroidManifest.xml的(包名是AndroidManifest.xml开头package的属性)

  1. <application>
  2. <provider
  3. android:name="android.support.v4.content.FileProvider"
  4. android:authorities="包名.fileprovider"
  5. android:grantUriPermissions="true"
  6. android:exported="false">
  7. <meta-data
  8. android:name="android.support.FILE_PROVIDER_PATHS"
  9. android:resource="@xml/file_paths" />
  10. </provider>
  11. </application>

步骤2:在res里面创建xml文件夹然后在里面创建file_paths.xml的文件,内容如下

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <paths>
  4. <external-path path="" name="camera_photos" />
  5. </paths>
  6. </resources>

步骤3:可以再触发事件中调用相机

  1. File file = new File(Environment.getExternalStorageDirectory(), "/temp/" + System.currentTimeMillis() + ".jpg");
  2. imageUri = Uri.fromFile(file);
  3. if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
  4. //通过FileProvider创建一个content类型的Uri
  5. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  6. imageUri = FileProvider.getUriForFile(UpdataActivity.this, "com.shiyun.fgt.fileprovider",
  7. file);
  8. }
  9. Intent intent = new Intent();
  10. intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加这一句表示对目标应用临时授权该Uri所代表的文件
  11. intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//设置Action为拍照
  12. intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//将拍取的照片保存到指定URI
  13. startActivityForResult(intent, 1);//1识别码

步骤4:在activity中的onActivityResult里面通过是识别码(1)来识别。方法里面就会返回相机的数据。



动态权限的使用第三方库。(简单方便)

依赖:

compile 'com.lovedise:permissiongen:0.0.6'
a.在触发事件里面判断权限有没有
  1. if (ContextCompat.checkSelfPermission(UpdataActivity.this, Manifest.permission.CAMERA)
  2. != PackageManager.PERMISSION_GRANTED) {
  3. // 没有权限,申请权限。
  4. PermissionGen.needPermission(this, 200, Manifest.permission.CAMERA);
  5. } else {
  6. // 有权限了,直接使用相机。
  7. pho();
  8. }

b.在使用的相机的界面的activity里面编写以下代码(复制粘贴即可)


  1. @Override //权限的返回结果
  2. public void onRequestPermissionsResult(int requestCode, String[] permissions,
  3. int[] grantResults) {
  4. PermissionGen.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
  5. }
  6. //权限获取成功的调用方法
  7. @PermissionSuccess(requestCode = 200)
  8. public void openCamera() {
  9. pho();
  10. //Toast.makeText(this, "Contact permission is granted", Toast.LENGTH_SHORT).show();
  11. }
  12. //权限获取失败的调用方法
  13. @PermissionFail(requestCode = 200)
  14. public void failOpenCamera() {
  15. //Toast.makeText(this, "Camera permission is not granted", Toast.LENGTH_SHORT).show();
  16. Toast.makeText(this, "相机权限开启失败", Toast.LENGTH_SHORT).show();
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/175289
推荐阅读
相关标签
  

闽ICP备14008679号