初学 Android,请教下 Camera 的问题

2021-12-16 08:43:50 +08:00
 Features
1.我在 AOSP 上看 Camera 应用的源码,发现没有 AndroidManifest.xml 这个文件

2.我使用以下代码尝试打开 Camera ,没有请求任何权限,AndroidManifest 都没写,居然成功打开了,也没有闪退
机型是 HW mate20 ,是啥原因呢?


```
if(v == btn){
//take photo and return result
Intent intent = new Intent();
intent.setAction("android.media.action.IMAGE_CAPTURE");
intent.addCategory(Intent.CATEGORY_DEFAULT);

startActivityForResult(intent,11);
}
```
6820 次点击
所在节点    Android
8 条回复
gtanyin
2021-12-16 08:47:01 +08:00
因为你这是跳转了系统页面,请求拍照。而不是自己打开摄像头。由于你无法控制用摄像头做什么,只能被动接收返回的照片,所以不用权限。
windplume
2021-12-16 08:47:05 +08:00
你这个是调用其它的相机程序,当然不需要权限啊
Mav
2021-12-16 09:37:24 +08:00
理解成在桌面点开“相机”。
SakuraOjosama
2021-12-16 09:56:41 +08:00
AOSP 源码下的相机不是 Camera ,路径是 packages\apps\Camera2 ,当然部分高通定制机可能是 packages\apps\SnapdragonCamera ,或者一部分 MTK 定制机可能是 vendor\mediatek\proprietary\packages\apps\Camera2 ,华为的话,如果是鸿蒙系统,还没有研究过
SakuraOjosama
2021-12-16 09:59:40 +08:00
你所写的就相当于你启动了相机这个 APP ,而不是通过接口调用去控制相机
接口调用的话,给出几个文档:
https://developer.android.com/training/camerax
https://developer.android.com/training/camera2
Camera1 代虽然简单,但也接近废弃,就不给了,camera2 用起来很复杂,推荐 camerax
unco020511
2021-12-16 10:09:04 +08:00
官方文档-评估应用是否需要声明权限 :https://developer.android.com/training/permissions/evaluating?hl=zh-cn

评估应用是否需要声明权限
在您的应用中声明权限之前,请考虑您是否需要这样做。如果应用声明权限,那么每当用户尝试使用需要运行时权限的应用功能时,应用便不得不中断用户的操作,请求相应权限。然后,用户必须做出决定。如果用户不能理解您的应用为何请求特定权限,可能就会拒绝授予该权限,甚至卸载您的应用。

想想是否有其他已安装的应用能够代您的应用执行相应功能。如果有的话,您应使用 intent 将任务委托给其他应用。这样您就不必声明所需的权限,因为其他应用会声明该权限。

声明权限的替代方案
本部分将介绍您的应用可在不声明任何权限的情况下实现的几个用例。


拍摄照片
用户可能会在您的应用中使用预安装的系统相机应用来拍摄照片。

在这种情况下,请勿声明 CAMERA 权限,而是改为调用 ACTION_IMAGE_CAPTURE intent 操作。
Features
2021-12-16 10:33:26 +08:00
@Mav @SakuraOjosama @gtanyin @unco020511 @windplume
非常感谢你们的回复,学习到很多😁
SuperLino
2021-12-16 17:31:00 +08:00
虽然上面大佬已经回答好了,但安卓佬还是想水一条评论

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/822503

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX