当前位置: 首页 > news >正文

Android 11 强制用户使用系统相机?

最近在Android开发者官网中查看Android 11版本变更记录的时候,发现一个有意思的改动

此项变更是说在使用Intent创建拍照,录像隐式请求的时候,只有手机预装的系统相机才会响应。举个例子,当用户需要更新微信头像,选择拍摄上传的时候,如果用户手机上有多款能响应该Intent的相机应用可供选择的话,Android11之前是这个样子的:

如果开发者没有进行适配的话,Android11上就直接跳转到系统相机去了。对于很多使用美颜,滤镜和贴纸功能的用户影响还是挺大的。

又是一波适配工作来了呀......

通过隐式Intent启动Activity的时候,我们总是需要查询一下

分别在Android Q和Android R的模拟器上运行,我们发现Android R只会返回系统相机的info

Android Q:

Android R:

文档中提供了适配方案:

If you want a specific third-party camera app to handle your app's intent, you may do so by explicitly specifying the third-party camera app’s package name to fulfill the intent.

如果希望特定的第三方相机应用程序处理应用程序的意图,可以通过显式指定第三方相机应用程序的包名称来实现该意图。例如:

Android11 中要提供原来版本的交互体验,可能就需要自己实现选择UI了......

此项变更已经在Android11 beta版本中生效,不知道正式的版本是否有所变化,也不清楚Android CTS是否会测试这一项内容,或者允许OEM厂商将其更改为原来的规则(如果CTS要测试这一项的话,OEM厂商的海外机型肯定是不能改的)。但从现在的版本迭代中可以看到,官方基于对用户的隐私和安全的保护考虑,对于API的限制是越来越多了。

虽然此项变更在issue track区域,很多Android开发者提出了明确的质疑,不过趋势是不可更改的,从一些API的限制上我们可以明显的感受到这一点。

"……我们认为,对用户的隐私与安全的保护才是正确的权衡。" — 谷歌 Issue Tracker.

比如在Android M之前,很多Android App在需要使用相机拍摄用户头像等需求的时候,大部分开发者都会使用MediaStore.ACTION_IMAGE_CAPTURE来满足这一需求。这种方式开发简单,而且不需要向系统请求Camera权限,但是在M之后,只要在manifest文件中申请了Camera权限,仅仅使用action为ACTION_IMAGE_CAPTURE的intent时,也必须要先动态申请Camera权限,否则将会抛出异常

java.lang.SecurityException: Permission Denial

官方文档中也注明了这一点

所以在使用第三方lib的时候,还要关注它在 manifest 文件中添加的东西

~~END~~


技术交流,欢迎加我微信:ezglumes ,拉你入技术交流群。

推荐阅读:

音视频面试基础题

OpenGL ES 学习资源分享

一文读懂 YUV 的采样与格式

OpenGL 之 GPUImage 源码分析

推荐几个堪称教科书级别的 Android 音视频入门项目

觉得不错,点个在看呗~

相关文章:

  • 3A之自动白平衡(AWB)篇
  • Shader基础技巧整理
  • 一起用Gradle Transform API + ASM完成代码织入呀~
  • 用shader做一个柿子颜色的过场动画
  • 只需跟着Google学android:ViewModel篇
  • 我用 OpenGL 实现了那些年流行的相机滤镜
  • 有必要去研究Handler和Binder么?
  • 音视频交流群又来啦~~~
  • Android 手机如何拍摄RAW图
  • 华为手机刷微博体验更好?技术角度的分析和思考
  • 播放视频时如何调整音频的音量
  • 视频码控:CBR、VBR和ABR
  • OpenGL ES 相机 LUT 滤镜
  • Android 11 正式发布 | 开发者们的舞台已就绪
  • 刚刚,鸿蒙 OS 2.0 发布!HarmonyOS 将正式开源!
  • hexo+github搭建个人博客
  • [译] React v16.8: 含有Hooks的版本
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Elasticsearch 参考指南(升级前重新索引)
  • Flex布局到底解决了什么问题
  • Java到底能干嘛?
  • Java小白进阶笔记(3)-初级面向对象
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从0实现一个tiny react(三)生命周期
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 浮动相关
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 聊聊redis的数据结构的应用
  • 前端相关框架总和
  • 前端之React实战:创建跨平台的项目架构
  • 深度学习入门:10门免费线上课程推荐
  • 什么是Javascript函数节流?
  • 通过npm或yarn自动生成vue组件
  • 我有几个粽子,和一个故事
  • 延迟脚本的方式
  • 运行时添加log4j2的appender
  • 走向全栈之MongoDB的使用
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​configparser --- 配置文件解析器​
  • #etcd#安装时出错
  • #Linux(make工具和makefile文件以及makefile语法)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (rabbitmq的高级特性)消息可靠性
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十六)Flask之蓝图
  • (四)Controller接口控制器详解(三)
  • (转) 深度模型优化性能 调参
  • (转)jdk与jre的区别
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net Memory Profiler的使用举例
  • ??javascript里的变量问题
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具