赞
踩
官方的解决方案:https://developer.android.google.cn/training/secure-file-sharing/setup-sharing.html
步骤1:
在AndroidManifest.xml的(包名是AndroidManifest.xml开头package的属性)
- <application>
- <provider
- android:name="android.support.v4.content.FileProvider"
- android:authorities="包名.fileprovider"
- android:grantUriPermissions="true"
- android:exported="false">
- <meta-data
- android:name="android.support.FILE_PROVIDER_PATHS"
- android:resource="@xml/file_paths" />
- </provider>
- </application>
步骤2:在res里面创建xml文件夹然后在里面创建file_paths.xml的文件,内容如下
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <paths>
- <external-path path="" name="camera_photos" />
- </paths>
- </resources>
步骤3:可以再触发事件中调用相机
- File file = new File(Environment.getExternalStorageDirectory(), "/temp/" + System.currentTimeMillis() + ".jpg");
- imageUri = Uri.fromFile(file);
- if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
- //通过FileProvider创建一个content类型的Uri
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- imageUri = FileProvider.getUriForFile(UpdataActivity.this, "com.shiyun.fgt.fileprovider",
- file);
- }
- Intent intent = new Intent();
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加这一句表示对目标应用临时授权该Uri所代表的文件
- intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//设置Action为拍照
- intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//将拍取的照片保存到指定URI
- startActivityForResult(intent, 1);//1识别码
步骤4:在activity中的onActivityResult里面通过是识别码(1)来识别。方法里面就会返回相机的数据。
动态权限的使用第三方库。(简单方便)
依赖:
compile 'com.lovedise:permissiongen:0.0.6'
a.在触发事件里面判断权限有没有
- if (ContextCompat.checkSelfPermission(UpdataActivity.this, Manifest.permission.CAMERA)
- != PackageManager.PERMISSION_GRANTED) {
- // 没有权限,申请权限。
- PermissionGen.needPermission(this, 200, Manifest.permission.CAMERA);
- } else {
- // 有权限了,直接使用相机。
- pho();
- }
b.在使用的相机的界面的activity里面编写以下代码(复制粘贴即可)
- @Override //权限的返回结果
- public void onRequestPermissionsResult(int requestCode, String[] permissions,
- int[] grantResults) {
- PermissionGen.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
- }
- //权限获取成功的调用方法
- @PermissionSuccess(requestCode = 200)
- public void openCamera() {
- pho();
- //Toast.makeText(this, "Contact permission is granted", Toast.LENGTH_SHORT).show();
- }
- //权限获取失败的调用方法
- @PermissionFail(requestCode = 200)
- public void failOpenCamera() {
- //Toast.makeText(this, "Camera permission is not granted", Toast.LENGTH_SHORT).show();
- Toast.makeText(this, "相机权限开启失败", Toast.LENGTH_SHORT).show();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。