Android11 相机拍照权限,以及解决resolveActivity返回null

这篇具有很好参考价值的文章主要介绍了Android11 相机拍照权限,以及解决resolveActivity返回null。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、配置拍照和读写权限

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

二、手动申请权限

        implementation 'com.permissionx.guolindev:permissionx:1.4.0'

        1、手动申请读写,拍照权限

PermissionX.init(this)
    .permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.CAMERA)
            .request((allGranted, grantedList, deniedList) -> {
                if(allGranted){

                }
            });

        2、手动申请文件管理权限

if (Build.VERSION.SDK_INT >= 30 && !Environment.isExternalStorageManager()) {
    Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivity(intent);
}

三、Manifest中配置queries(解决resolveActivity为null)

<application
    ...>
    ...
</application>

<queries>
    <intent>
        <action android:name="android.media.action.IMAGE_CAPTURE"/>
    </intent>
    <intent>
        <action android:name="android.media.action.VIDEO_CAPTURE"/>
    </intent>
</queries>

四、Manifest中配置provider

<application
    ...>
    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="你的package包名.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            tools:replace="android:resource"
            android:resource="@xml/file_paths" />
    </provider>
</application>

五、配置file_paths文件

Android11 相机拍照权限,以及解决resolveActivity返回null,Android,android,android studio,android-studio文章来源地址https://www.toymoban.com/news/detail-608790.html

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <!--目录为:Environment.getExternalStorageDirectory()-->
    <external-path
        name="download"
        path="Download" />

    <external-path name="external_files" path="." />
</paths>

六、调用相机(FileUtil类)

public class FileUtil {
    public static String takePhoto(Activity activity) { //照相
        //调用相机
        Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//用来打开相机的Intent
        if(takePhotoIntent.resolveActivity(activity.getPackageManager())!=null){
            //Constant.PIC_DIR = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Download"
            File file=new File(Constant.PIC_DIR);
            if(!file.exists())file.mkdir();
            // 保存路径
            file = getFile(Constant.PIC_DIR, System.currentTimeMillis()+ ".jpg");
            Uri uri;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                //设置7.0以上共享文件,分享路径定义在xml/file_paths.xml
                uri = FileProvider.getUriForFile(activity, "你的package包名.fileprovider", file);
            } else {
                // 7.0以下,共享文件
                uri = Uri.fromFile(file);   // 将路径转换为Uri对象
            }
            takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);    // 表示录制完后保存的录制,如果不写,则会保存到默认的路径,在onActivityResult()的回调,通过intent.getData中返回保存的路径
            //Constant.REQ_CODE为任意整数,用于回调
            activity.startActivityForResult(takePhotoIntent, Constant.REQ_CODE);  // 跳转
            return file.getAbsolutePath();
        }
        return null;
    }

    public static File getFile(String filePath, String fileName){
        File dir = new File(filePath);
        if (!dir.exists()){//如果不存在,进行创建
            dir.mkdirs();
        }
        File soundFile = new File(dir,fileName);
        if (!soundFile.exists()){
            try {
                soundFile.createNewFile();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        return soundFile;
    }

    //通过URI获取file
    public static File getFileFromContentUri(Uri contentUri, Context context) {
        if (contentUri == null) {
            return null;
        }
        File file = null;
        String filePath;
        String[] projection = { MediaStore.Files.FileColumns.DATA };
        ContentResolver contentResolver = context.getContentResolver();
        Cursor cursor = contentResolver.query(contentUri, projection, null,
                null, null);
        if (cursor != null && cursor.moveToFirst()) {
            filePath = cursor.getString(0);
            cursor.close();
            if (!filePath.isEmpty()) {
                file = new File(filePath);
            }
        }
        return file;
    }
}

七、处理拍照 / 本地图片回调(Activity类)

private String curSelectPhoto = "";

//启动相机
private void takePhoto(){
    curSelectPhoto = FileUtil.takePhoto(this);
}

//从本地获取图片
private void getPhotoFromLocal(){
    Intent i = new Intent();
    i.setAction(Intent.ACTION_PICK);
    i.setType("image/*");
    //Constant.PHOTO_LOCAL为任意整数,用于获取本地图片回调
    startActivityForResult(i, Constant.PHOTO_LOCAL);
}

@Override
public void onActivityResult(final int requestCode, int resultCode, final Intent data) {
    super.onActivityResult(requestCode,resultCode,data);
    if(resultCode==RESULT_OK){
        ThreadManager.getThreadPool().exeute(() -> {
            File file=null;
            if(requestCode==Constant.REQ_CODE){    //拍照
                file = new File(curSelectPhoto);
            }else{  //从本地上传
                Uri uri = data.getData();  //图片的保存路径
                file = FileUtil.getFileFromContentUri(uri,getApplicationContext());
            }
        });
    }
}

到了这里,关于Android11 相机拍照权限,以及解决resolveActivity返回null的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android调用相机拍照,调用图库,上传图片

    Android调用相机进行拍照,调用图库获取图片,可进行裁剪,显示图片,并将图片上传

    2024年02月11日
    浏览(58)
  • Android 13 骁龙相机点击拍照流程分析(二)——点击拍照到存入相册

            本篇是在Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图文章的基础上进行延申的,前面的预览、点击拍照的过程参考第一篇:Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图-CSDN博客         从第一篇的

    2024年02月06日
    浏览(51)
  • Android相册选择图片、相机拍照上传功能实现(上)

    先上效果图 下面就来说一下相册选择图片和相机拍照的实现 相册选择图片很简单,只需要通过 Intent 设置拉起就可以了 Intent 拉起相册 /** 打开相册 @param type 打开类型区分码(type是我用来区分回调的) / private void openGallery(int type) { Intent gallery = new Intent(Intent.ACTION_PICK); galler

    2024年04月16日
    浏览(54)
  • 十分钟实现 Android Camera2 相机拍照

    因为工作中要使用 Android Camera2 API ,但因为 Camera2 比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在 CSDN 上记录了下,希望能帮助到更多的小伙伴。 上篇文章 我们使用 Camera2 实现了相机预览的功能,这篇文章我们接着上文,来实现 Cam

    2024年02月11日
    浏览(68)
  • Android 使用Camera1实现相机预览、拍照、录像

    本文介绍如何从零开始,在 Android 中实现 Camera1 的接入,并在文末提供 Camera1Manager 工具类,可以用于快速接入 Camera1 。 Android Camera1 API 虽然已经被 Google 废弃,但有些场景下不得不使用。 并且 Camera1 返回的帧数据是 NV21 ,不像 Camera2 、 CameraX 那样,需要自己再转一层,才能得

    2024年02月08日
    浏览(52)
  • Android 13 骁龙相机点击拍照流程分析(一)——点击拍照到更新到左下角缩略图

    由于最近客户定制需要将文件挂载类型修改为sdcardfs,由于修改了文件挂载类型,导致了骁龙相机拍照后不能点击进入相册,故对骁龙相机从点击事件开始进行问题的排查,此处不介绍最终的sdcardfs挂载后的问题解决方案 拍照的流程大概分为几个阶段:打开相机进行预览、点

    2024年02月04日
    浏览(53)
  • 解决uniapp手机端获取用户设备是否授权,进行授权提示,获取用户相机授权(Android 权限清单整理)

    最近在上架app时遇到了一些授权询问的问题,在这里简单记录一下,主要使用的是uniapp进行开发,在官网中有说明使用uni.authorize()进行授权请求,但是该方法不支持h5和app,所以采用plus.android.requestPermissions()方法进行授权判断操作,话不多说直接上代码 以下代码进行的

    2024年02月05日
    浏览(55)
  • Android权限申请、相册选择图片、拍照、获取联系人、页面跳转

    目前第一版封装了:页面启动、页面启动回调、获取通讯录联系人、获取相册图片、拍照获取图片、单条权限申请、多条权限申请,且已适配到Android 13 导入 权限申请 权限申请支持单条权限和多条权限申请,支持强制拒绝后弹窗提示用户并引导区设置也开启权限 默认强制拒

    2024年02月16日
    浏览(49)
  • 手机无法访问”xxx”目录(Android 11及以上授予文件管理权限)的解决方法

    Android11改变了此前安卓系统对文件管理的规则,在Android11上,文件读写变成了特殊权限。应用默认只能读写自己的目录/android/data/包名,这就导致我们想修改某个文件里的内容,结果却没有读写权限。本文主要提供一种解决方法——root+adb。 进入adb+ROOT权限开启 我们进入 adb s

    2024年02月16日
    浏览(62)
  • Android申请权限(相机权限和读写权限)

    开发一个相机应用,需要申请三个权限:相机、读文件、写文件。 初步授权成功

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包