我试图在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日编辑:
注意:如果您通过调用现有的相机应用程序来使用相机,则您的应用程序无需请求此权限。
这就是CN1不需要此权限的原因!
感谢您帮助我通过CN1获得权限管理。
答案 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
在某些时候,如果没有获得许可,就无法使用手机相机。