如何强制将权限 "android.permission.CAMERA" 添加到代号一中的清单中

How to force permission "android.permission.CAMERA" to be added to manifest in Codename one

我正在尝试在代号一中显示后置摄像头的实时预览。我为此使用本机界面(我首先定位 Android)。

为了让我的应用程序在不弄乱构建提示的情况下使用相机,我在我的主窗体中添加了这些行:

if (Capture.hasCamera()){
     Dialog.show("Appareil photo détecté", "Votre matériel est bien équipé d'un appareil photo!", "OK", null);
    } 

我这样做是因为 Codename One blog

android.hardware.camera & android.permission.RECORD_AUDIO - are triggered by com.codename1.Capture

然而,在使用真实设备上 Android Studio 下从 CN1 获得的源代码调试应用程序时(API LEVEL 19 aka Kit Kat),我总是得到 java.lang.RuntimeException: Fail to connect to camera service

过了一会儿,我意识到异常是由于 manifest.xml 中缺少以下权限造成的:

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

请注意,如 CN1 博客中所述,<uses-feature android:name="android.hardware.camera" android:required="false" /> 行已由 CN1 添加。

既然我已经添加了这一行,那么实时预览就可以很好地显示了。

为什么这个权限没有自动添加到清单中,我真的应该将它添加到构建提示中吗?

此外,我还有另一个项目使用相机拍摄照片并将其保存在 phone 上,并且相机权限既未显示(在 Android 应用程序信息中)也未在应用程序安装期间请求,而它工作得很好。请注意,例如Twitter 应用程序在应用程序权限中显示 "Take photos and record videos",因此我的 phone 隐藏相机权限似乎没有问题。

编辑 2016 年 11 月 20 日:

确实 Android Developer's guide 表示

Note: If you are using the camera by invoking an existing camera app, your application does not need to request this permission.

这就是CN1不需要这个权限的原因!

感谢帮我弄好CN1的权限管理。

过去,您将所需的权限添加到您的清单中,然后当您的用户尝试安装您的应用程序时会请求它。从 Android 6.0+ 开始,这已经改变了。现在,您只需在您的应用首次需要权限时请求权限即可。用户授予您权限后,您下次无需再次询问。这样做的一些好处包括让您的用户了解您为什么需要特定权限,而不是请求您实际上不需要的权限。

您可以在此处详细了解如何实施:https://developer.android.com/training/permissions/requesting.html

在某些时候,如果不征求许可,就无法使用手机摄像头。

您需要添加以下构建提示:

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

您也可以将其添加到 cn1lib,以便自动注入。