如何强制将“android.permission.CAMERA”权限添加到Codename中的清单中

时间:2016-11-19 20:19:53

标签: android codenameone android-permissions

我试图在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 - 由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博客所述,CN1已添加了行<uses-feature android:name="android.hardware.camera" android:required="false" />

现在我已经添加了这一行,现场预览很好地展示了。

为什么这个权限不会自动添加到清单中,我是否真的将其添加到构建提示中?

此外,我还有另一个项目,使用相机拍照并将其保存在手机上,相机权限既未显示(在Android应用信息中),也未在应用安装期间请求,但效果非常好。请注意,例如Twitter应用程序在应用程序权限中显示“拍照和录制视频”,因此我的手机隐藏相机权限似乎不是问题。

2016年11月20日编辑:

确实Android Developer's guide表示

  

注意:如果您通过调用现有的相机应用程序来使用相机,则您的应用程序无需请求此权限。

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

感谢您帮助我通过CN1获得权限管理。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

过去,您需要向清单添加所需的权限,然后在用户尝试安装您的应用时请求该权限。从Android 6.0+开始,这已经发生了变化。现在,您可以在应用首次需要时请求权限。用户授予您许可后,您不需要再次询问。这样做的一些好处包括让用户了解您需要特定权限的原因,而不是请求您实际上不需要的权限。

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

在某些时候,如果没有获得许可,就无法使用手机相机。