【Android Studio】API 29(即Android 10)或更高版本,在程序启动时检查相机权限,并在未获取该权限时请求它

embedded/2024/9/23 4:04:50/

文章目录

    • 1. 在AndroidManifest.xml文件中,声明相机权限:
    • 2. 在你的Activity中(例如MainActivity)
    • 测试

1. 在AndroidManifest.xml文件中,声明相机权限:

    <uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera.autofocus" /><uses-feature android:name="android.hardware.camera.flash" />

在这里插入图片描述

2. 在你的Activity中(例如MainActivity)

  • 在onCreate方法或其他合适的位置,添加检查并请求权限的逻辑:
    /*相机*/private static final int REQUEST_CAMERA_PERMISSION = 200;

在这里插入图片描述

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);} else {// 权限已经被授予,直接进行操作}

在这里插入图片描述

  • onRequestPermissionsResult方法,
    你可以在这里处理用户的选择。如果用户授予了权限,你可以继续执行需要相机权限的操作;如果用户拒绝了权限请求,你应该给出适当的提示,并可能禁用某些依赖于相机功能的应用部分。
    /*** 确认camera权限*/@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (requestCode == REQUEST_CAMERA_PERMISSION) {if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 权限被用户同意,可以进行操作} else {// 权限被用户拒绝,给出提示}}}

在这里插入图片描述

测试

在这里插入图片描述


http://www.ppmy.cn/embedded/115404.html

相关文章

第五章 继承、多态、抽象类与接口 课后训练(3)

训练 5 模拟轿车驾驶 对于轿车而言&#xff0c;他至少有友们他便和刹车踏板。模拟自动挡车型的正确驾驶的方式。 public class car {public static void main(String[] args) {System.out.print("如果你想前进&#xff0c;就");//创建加速的对象add add1 new add()…

java(3)数组的定义与使用

目录 1.前言 2.正文 2.1数组的概念 2.2数组的创建与初始化 2.2.1数组的创建 2.2.1数组的静态初始化 2.2.2数组的动态初始化 2.3数组是引用类型 2.3.1引用类型与基本类型区别 2.3.2认识NULL 2.4二维数组 2.5数组的基本运用 2.5.1数组的遍历 2.5.2数组转字符串 2.…

C# Winform调用控制台程序(通过Process类)

文章目录 1.引入命名空间2.初始化进程3.启动进程 1.引入命名空间 using System.Diagnostics;2.初始化进程 1.startInfo.FileName 运行的.exe文件的完整路径&#xff0c;也可以使用相对路径。 2.startInfo.Arguments 允许你向.exe程序传递命令行参数,参数间用空格分隔&#xf…

前端vue-自己封装组件并使用三步走

在components下&#xff0c;创建.vue文件&#xff0c;里面正常写样式什么的&#xff0c;在需要引用的文件内先在script标签内引入在components下创建的组件&#xff0c;再导出处使用&#xff0c;再在templete标签内直接使用自己封装的组件。

『功能项目』QFrameWorkBug关联Slot(插槽)【67】

我们打开上一篇66QFrameWorkBug拖拽功能的项目&#xff0c; 本章要做的事情是关联插槽Slot 修改脚本&#xff1a;UISlot.cs 修改脚本&#xff1a;UGUICanvas.cs 此时关联Slot已经完成 接下来的文章内容&#xff1a; 1.QFrameWork扔到地上UGUI 2.位置存储功能 3.点击名称寻…

剖析Spark Shuffle原理(图文详解)

Spark Shuffle 1.逻辑层面 从逻辑层面来看&#xff0c;Shuffle 是指数据从一个节点重新分布到其他节点的过程&#xff0c;主要发生在需要重新组织数据以完成某些操作时。 RDD血统 Shuffle 触发条件&#xff1a; reduceByKey、groupByKey、join 等操作需要对数据进行分组…

【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤

问题描述 Azure Redis在使用的过程中&#xff0c;多次无规律的出现超时问题。抓取到客户端的异常错误后&#xff0c;想进一步的分析是何原因导致了如下异常呢&#xff1f; Timeout awaiting response (outbound0KiB, inbound0KiB, 5984ms elapsed, timeout is 5000ms), command…

Vue3.3新特性defineModel

defineModel的使用: defineModel选项可以帮我们省去很多麻烦 不仅需要上述操作&#xff0c;还需要进行一定的配置&#xff1a; 在vite.config.js中进行配置 defineModel是一个宏&#xff0c;所以不需要从vue中import导入&#xff0c;直接使用就可以了。这个宏可以用来声明一个…