Android打开摄像头照相黑屏,使用dialog弹出对话框,请求6.0动态权限

01Android相机开发(开关相机) 开关相机分为以下几个步骤:申请授权-->选择相机-->打开相机-->关闭相机 1申请授权 在使用相机 API 之前,必须在 AndroidManifest.xml 注册相机权限 android.permission.CAMERA。 静态授权 <uses-permission android:name="android.permission.CAMERA" /> 需要注意的是 6.0 以上的系统需要我们在程序运行的时候进行动态权限申请,所以我们需要在程... 阅读详情

最近开发中需要用到相机扫码的功能,但是有的手机可以直接打开摄像头扫码,而有的手机点开则是黑屏并且没有权限请求。

 

原因:

android6.0后,推出了动态权限管理。android6.0后,对于一些特别敏感的权限,开发者必须在程序中进行声明。拍照和从相册选择图片都是涉及到用户隐私的敏感权限,必须在程序中进行声明。

 

解决方法:

只需要在需要用到相机时添加以下代码:

//6.0以上都需要手动添加动态权限
	ActivityCompat.requestPermissions(getActivity(),
	new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

 

或者使用以下方法,虽然没有上面的简单粗暴,但是代码更明了,更严谨

第一步:

调用ContextCompat.checkSelfPermission(Context context, String permission)检查是否有WRITE_EXTERNAL_STORAGE权限,如果没有就申请权限,否则直接拍照。

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                //申请权限,CEMERA_OK是自定义的常量
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        CEMERA_OK);
            }
        } else {
            //有权限,直接拍照
            //执行拍照的动作
        }

第二步:

重写onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults)方法,检查权限申请是否成功。

@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);
    }

 

 

 

 

 

并且,一定要记得在Menifest文件中添加对应的权限:

 

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

 

这样,再调用手机的相机时,会弹出一个授权请求,允许后,便可以使用相机了。

 

举一反三

当我们需要进行其他的需要动态权限的敏感操作时,也可以照葫芦画瓢,只要把权限关键词CAMRE改成其他权限名称就好,下面列一下权限的名称:

 

权限组权限
CALENDARREAD_CALENDAR
CALENDARWRITE_CALENDAR
CAMERACAMERA
CONTACTSREAD_CONTACTS
CONTACTSWRITE_CONTACTS
CONTACTSGET_ACCOUNTS
LOCATIONACCESS_FINE_LOCATION
LOCATIONACCESS_COARSE_LOCATION
MICROPHONERECORD_AUDIO
PHONEREAD_PHONE_STATE
PHONECALL_PHONE
PHONEREAD_CALL_LOG
PHONEWRITE_CALL_LOG
PHONEADD_VOICEMAIL
PHONEUSE_SIP
PHONEPROCESS_OUTGOING_CALLS
SENSORSBODY_SENSORS
SMSSEND_SMS
SMSRECEIVE_SMS
SMSREAD_SMS
SMSRECEIVE_WAP_PUSH
SMSRECEIVE_MMS
STORAGEREAD_EXTERNAL_STORAGE
STORAGEWRITE_EXTERNAL_STORAGE

 

同样,不要忘了Menifest里面的权限添加。

 

-------------------------------------------------------------我是分隔线--------------------------------------------------------------

 

这里贴出使用dialog进行动态权限请求的代码(这里以文件读写和录音权限为例子):

1.在要进行判断的Activity的onCreate()方法内,判断是否已经给予相应的权限

             //6.0动态权限(文件)
		 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
				 != PackageManager.PERMISSION_GRANTED) {
			 showMissingPermissionDialog();//弹出dialog方法
		 }
		 //6.0动态权限(录音)
		 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
				 != PackageManager.PERMISSION_GRANTED) {
			 showMissingPermissionDialog();//弹出dialog方法
		 }

 

2.弹出dialog及其点击事件方法本体

     /**
	 * 提示用户的 dialog(6.0动态权限)
	 */
	protected void showMissingPermissionDialog() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("提示");
		builder.setMessage("该应用缺少权限,可能会导致应用无法正常使用。\n\n请点击\"设置\"→\"权限管理\"打开所需权限,并重启应用。");
		// 拒绝, 退出应用
		builder.setNegativeButton(R.string.cancel,
				new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Log.i("info", "8--权限被拒绝,此时不会再回调onRequestPermissionsResult方法");
					}
				});
		builder.setPositiveButton(R.string.setting,
				new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Log.i("info", "4,需要用户手动设置,开启当前app设置界面");
						startAppSettings();
					}
				});
		builder.setCancelable(false);
		builder.show();
	}

	/**
	 * 打开     App设置界面(6.0动态权限)
	 */
	private void startAppSettings() {
		Intent intent = new Intent(
				Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
		intent.setData(Uri.parse("package:" + getPackageName()));
		startActivity(intent);
	}

 

3.效果图如下:

 

 

 

 

以上!共勉!

 

 

 

Android多媒体功能开发(14)——Camera2框架 Camera2框架的相机模型被设计成一个管道,使用相机时需要先和相机设备建立一个会话,通过该会话向相机发送请求,相机将图像数据保存到配置好的Surface,Surface就是存放图像数据的缓冲区。请求分为单次请求、重复请求和多次请求三种。 阅读详情

相关推荐

Android 11版本以上 调用原相机拍摄视频并显示 文件权限问题

android 调用原相机拍摄视频并显示 android11以上版本的写法 涉及文件权限问题(写的时候机器是android12版本)

weixin_47082655的博客 1406

Android Camera2 —CameraManager API详解

在 API 级别 30 之前,当应用程序尝试打开多个不同 ID 的 {@link CameraDevice} 并且该设备不支持打开此类组合时,{@link #openCamera} 将失败并抛出 {@link CameraAccessException} 或一个 或多个已打开的 {@link CameraDevice} 将断开连接并接收 {@link android.hardware.camera2.CameraDevice.StateCallback#onDisconnected} 回调。

闲暇部落 7108

Android系统 权限组管理和兼容性

本文学习Android应用的权限组 ,权限组管理 , 以及不同Android版本权限兼容性如何处理

我其实什么都不会 1516

Android 11 camera系统调试总结

camera2 debug ServiceManager: Permission failure: android.permission.SYSTEM_CAMERA from uid=10134 pid=3155 原因: 在搭载 Android 11 或更高版本的设备上,Android 框架支持系统相机,这些相机设备仅对具有 android.permission.SYSTEM_CAMERA 权限和常规相机权限的进程可见。Android 11 中引入了 android.permission.SYSTEM_C

岩之有理的博客 8258

尚硅谷课程【笔记】——大数据之Shell【一】

【【尚硅谷】Shell脚本从入门到实战】笔记

n04j04h06的博客 1321

RAG在医药行业为什么80%都翻车了?

这篇文章不是要劝你别做RAG,而是把坑说清楚。医药行业有它的特殊性——监管压力、专业术语密度、多语言混排、文档结构复杂——这些因素叠加在一起,让标准RAG教程里的那套方法论几乎直接失效

qq_31808385的博客 635

ios 请在设置中打开相机权限_在iOS中请求摄像头权限对话框启动(Prime权限)

权限底漆是为了避免一种情况,你的客户可能会拒绝一个关键功能接入的有效途径的应用程序。在iOS上,只允许每个功能触发默认系统权限一次。权限启动是指应用程序通过模仿系统权限的警报“启动”客户。这样做的好处是,如果客户选择退出(选择取消),该应用程序仍然可以在将来再次询问,直到他们说是 - 在此时显示实际的系统权限以及客户在统计上不太可能改变主意并进入负面的工作流程。此外,由于cameraSelecte...

weixin_39830906的博客 2271

stm32h743 FM25CL64铁电存储器踩坑记录

调试FRAM经验总结: 1、跑完FRAM读写代码之后,逻分仪发现总线上只有简单、短暂的电平变化,明显不是SPI的通信数据。 (经提醒发现连片选拉高拉低都没有执行到位) 后来发现是因为片选引脚没有初始化,所以直接拉高拉低是无效的。 2、引脚成功初始化后发现CLK、MISO、MOSI数据仍不正常。通过加打印的方式发现跑到HAL_SPI_Transmit中之后还没有执行到写SPI数据寄存器的那一步就return了。 后来经提醒发现: 上图中的指针使用方式错误 后来又发现: 打印出来发现

kuniqiw的博客 3844

Android相机权限检测兼容问题

转载请注明出处: http://blog.csdn.net/aa464971/article/details/60587764 源码 https://github.com/xiandanin/CameraPermissionCompat 6.0以后出了权限管理,而V4提供了一个权限检测的方法ContextCompat.checkSelfPermission 我在开发过程中遇到一个很诡异的问题:...

猴子请来的救兵 4905

版图提取的spice网表中参数含义及二级效应STI/WPE

寄生电阻、寄生电容可以从版图提出的.sp文件中看, ad area of drain 面积 as area of source pd perimeter of drain 周长,PS PD周长都不计算与栅极接触的部分 ps perimeter of source nrd 漏扩散区等效方块数 nrs 源扩散区等效方块数 sa ...

qq_40007892的博客 6552

《详细指南:本地部署Ollama大型模型的完整步骤》

通过本指南,您应该能够成功地在本地部署Ollama大型模型,并开始使用它进行各种AI任务。Ollama的易用性和高性能使其成为研究和开发的理想选择。Ollama是一个高性能的AI模型部署平台,支持在本地轻松部署大型语言模型。本指南将详细介绍如何在本地环境中部署Ollama,并运行一个大型模型。

eclipsercp的博客 3697

android开发 控制摄像头拍照

简略的介绍android中关于控制摄像头的一些基本操作,实现简易的拍照功能。

weixin_44434894的博客 971

Linux系统监控实战:夜莺监控+categraf采集器配置全流程(附常见问题排查)

本文详细介绍了在Linux系统中使用夜莺监控和categraf采集器进行系统监控的全流程配置,包括环境准备、核心配置文件(如config.toml和procstat.toml)详解、服务集成与验证、高级监控配置实战以及常见问题排查。通过实战案例和优化建议,帮助运维人员快速构建高效的监控体系。

xray4的博客 736

Android启用摄像头失败或者黑屏问题的几点原因

在 Android 开发中接触 Camera 的过程中,经常会碰到各种各样的问题,对于启用摄像头失败或者黑屏的情况,本人总结了一下几点原因,欢迎大家继续补充:   1.手机没有对应摄像头 例如手机可能只有两个摄像头,下标从0开始,Camera.open(2)打开的是第3个摄像头就会出问题 private void openCamera(int cameraFacing) thro...

阿飞的博客 2万+

W5500以太网&PoE扩展模块原理图设计,已量产

本文将以 W5500 以太网 & PoE 扩展板为对象,从嵌入式硬件设计的视角,深度拆解其电路架构、核心器件选型、关键功能实现,以及这款板子解决行业痛点的设计思路。

不脱发的程序猿 945

代码的自由之旅:用AI写出无版权烦恼的Verilog

他们还基于这个数据集,训练了一个名叫“FreeV”的AI模型,不仅能写出好用的Verilog代码,还把版权侵权的风险降到了仅3%。为了让AI安全地写Verilog,研究团队提出了三个“法宝”:一个检测AI是否会生成侵权代码的测试方法、一个干净的Verilog数据集FreeSet,还有一个基于FreeSet训练的AI模型FreeV。AI的记忆力超强,能记住训练时见过的代码。测试发现,一些用Verilog数据训练过的AI,比如VeriGen,生成侵权代码的概率从9%涨到了15%,说明它们可能学了不该学的代码。

步子哥的博客 1810

Android studio 申请读写权限,相机权限。

1.在src/main/AndroidManifest.xml中添加: <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_S

qq_29220369的博客 6335

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

iOS:检测多媒体(相机、相册、麦克风)设备权限,弹框提示

一、感言 新年伊始,万象更新,一转眼,就2019年了。 作为一个科班生,从事移动端开发好几年了,回顾曾经的摸爬滚打,兢兢业业,严格的来说,多少算是入行了。 过去成绩如何暂且不说,新的一年,我当加倍努力,凤凰涅槃,浴火重生。 二、介绍 在项目中,多媒体的使用非常常见,那么,询问设备的权限必不可少。 优点:这么做极大的增强了用户体验,友好地告知用户去开启权限。 例如:相机...

dienangpiao2051的博客 1257

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

瑞芯微 | 摄像头ov13850移植笔记

品牌:Omnivision型号:CMK-OV13850接口:MIPI像素:1320WOV13850彩色图像传感器是一款低电压、高性能1/3.06英寸1320万像素CMOS图像传感器,使用OmniBSI+?技术提供了单-1320万像素(4224×3136)摄像头的功能。通过串行摄像头控制总线(SCCB)接口的控制,它提供了全帧、下采样、开窗的10位MIPI图像。

一口Linux的专栏 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android 10调用相机拍照

Android 10 调用相机拍照

weixin_47663641的博客 1933

PermissionDialog【权限申请提示对话框】

版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言   随着Android6.0的普及,权限申请也变成了我们开发中必写的一段代码。比如sd卡权限、定位权限、拍照权限,这些几乎都是每个app必备的。而一般情况下我们都会在需要权限之前申请,然后各种判断。那既然是一些必备的是权限,我们为何不在我们一次打开app的时候就把这个全部都申请了呢?可是一下申请那么多权限对用户来说显然不是...

weixin_33884611的博客 1585

Android开发学习—调用摄像头权限拍照

android开发学习—调用摄像头权限拍照

weixin_72124399的博客 3703

r语言remarkdown展示图_Rmarkdown用法与R语言动态报告

数据分析用R语言非常便捷,因为R语言的社区强大,并且在不断更新和完善,提供了各种分析利器。Knitr和Rmarkdown包则是数据分析中的动态报告利器。下面是一份输出HTML文档的Rmd文件。备忘。---title: "Rmarkdown HandBook"author: "Cheng"date: "2016年9月4日"output:html_document:toc: yesnumber_sec...

weixin_39884738的博客 1420

Permission权限管理——隐私权限具体说明

1、应用场景 最近在做银行的项目,经过测试中心测试后提出需求,对于隐私权限需要满足以下两点: 1、隐私权限的申请应该依托于具体的业务场景,在不需要某个隐私权限的场景内不得申请该权限,非业务需要的隐私权限不得阻碍正常的业务流程。 2、需要明确告知用户具体的隐私权限用途,提供用户可以取消权限授权的途径。 针对以上两点我对应用隐私权限的申请进行了整合以及封装,支持在项目中最少量的代码调用,当然这里并不是封装成jar包,用兴趣的同学可以自己封装。 2、实际效果 这里我在权限申请之前告知用户具体的权限用途,文字描述

qq_18944229的博客 4028

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

调用系统相机首先在android项目中需要在AndroidManifest.xml中申明,即就是注册相机功能,因为在android的规定中调用硬件中的API需要先声明对这个API的调用当然也需要相关权限的获取。 //AndroidManifest.xml文件内容 <uses-permission android:name="android.permission.CAMERA" /> <intent-filter> <action android:name="and

Hersiman的博客 6230

Android 开发中的权限申请

我们都知道,从 Android 6.0 开始,部分危险权限在 xml 注册的同时,还需要动态申请。

小旭的专栏 1万+
上一篇: Error:(3, 17) 错误: 程序包org.junit不存在
下一篇: Android 使用Toast闪退
Nobody_else_
博客等级 码龄10年 51粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值