2016-11-19 43 views
4

我試圖表現出一種代號面對鏡頭後方的實時預覽體現。我使用原生界面(我首先瞄準Android)。如何強制許可「android.permission.CAMERA」被添加在代號一個

爲了讓我的應用程序使用相機而無需與構建提示搞亂了,我說在我的主要形式這些行:

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說博客已添加<uses-feature android:name="android.hardware.camera" android:required="false" />線由CN1。

現在,我已經加入這一行的實時預覽很好所示。

爲什麼這個權限不會自動在清單中添加的,應該我真的把它添加到構建暗示?

而且我有一個使用相機拍攝的照片,並將它們保存在手機和攝像機的權限上沒有顯示(在Android應用程序INFO)其他項目也沒有應用程序在安裝時要求,而它工作得很好。請注意,例如Twitter應用程序在應用程序權限中顯示「拍照並錄製視頻」,因此我的手機隱藏攝像頭權限似乎不成問題。

編輯2016年11月20日:

事實上Android Developer's guide指出

注:如果您使用的是相機通過調用現有的攝像頭應用程序,你的應用程序並不需要請求此權限。

這就是爲什麼CN1不需要此權限!

感謝您幫助我通過CN1獲得權限管理。

+0

如果您不想在運行時詢問權限,可以將您的compiledSDKversion設置爲android L.在這種情況下,您的應用將忽略所有棉花糖功能。 – Tasneem

回答

4

您需要添加下面的生成提示:

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

因此被自動注入你也可以將其添加到cn1lib。

+0

我最終做到了。但是,因爲我使用Capture.has camera(),爲什麼CN1會自動添加''而不是您提到的必需權限? – HelloWorld

+0

好吧,我終於明白了...我的誤解!確實[Android開發人員指南](https://developer.android.com/guide/topics/media/camera.html#manifest)聲明 >注意:如果您通過調用現有的相機應用程序使用相機,則應用程序不需要請求這個權限。 這就是爲什麼CN1不需要此權限! – HelloWorld

+0

@Shai爲什麼是「<使用功能的android:name =」android.hardware.camera「android:required =」false「/>」... >>>「false」<<<請澄清這是否是一個鍵入並打開或關閉相機的權限? (我在使用我的應用程序時遇到了一些麻煩,這會有所幫助,謝謝!) – ikevin8me

2

在過去,你想要的權限添加到您的清單,然後是當你的用戶試圖安裝您的應用要求。至於Android 6.0+,這已經改變。現在您可以在您的應用第一次需要時申請許可。用戶授予您許可後,您不需要再次詢問。這樣做的一些好處包括讓用戶意識到爲什麼需要特定的權限,而不是請求您實際上不需要的權限。

您可以閱讀更多關於如何在這裏實現它:https://developer.android.com/training/permissions/requesting.html

有沒有辦法使用手機攝像頭沒有在某些時候請求許可。

+0

我看到了在Android 6.0+上的感謝。但在目前的情況下,涉及Android 4.4.2仍然相當普遍(2016年11月所有Android設備的25%(https://developer.android.com/about/dashboards/index.html))。 – HelloWorld

+0

我不確定你的問題是什麼;如果你問是否需要將它添加到清單中,答案是肯定的。 – Zarwan

+0

我正在使用[Codename One](www.codenameone.com)(在任何地方寫一次)來開發我的應用程序。並且他們負責根據我使用的Codename One方法編寫所需的權限。但是,他們不會添加我在本地實現中編寫的內容的權限。 **這就是爲什麼我使用CN1方法,它應該根據文檔觸發攝像頭權限,但實際上並沒有**。由於我沒有直接訪問清單,因此我必須提供一個名爲「android.xpermissions」的特定「構建提示」,並將相機保留下來。 – HelloWorld