1

我正在爲我的科爾多瓦應用程序使用'imagepicker'插件從移動畫廊獲取圖像並使用它們。我正在測試我的應用程序在Android 6.0設備,這是問題,棉花糖Android 6.0需要在運行時權限不像舊版本「它正在舊版本」,但在API 23或更高時,它參加開放畫廊它立即關閉,應用程序崩潰。當我搜索時發現我需要許可才能做到這一點。所以我就開始使用「Android的權限科爾多瓦插件」,並通過複製他們在這個頁面提供的示例:https://www.npmjs.com/package/cordova-plugin-android-permissions科爾多瓦應用程序'Android權限科爾多瓦插件'沒有顯示權限對話框

是:

var permissions = cordova.plugins.permissions; 
permissions.hasPermission(permissions.CAMERA, checkPermissionCallback, null); 

function checkPermissionCallback(status) { 
    if(!status.hasPermission) { 
    var errorCallback = function() { 
     console.warn('Camera permission is not turned on'); 
    } 

    permissions.requestPermission(
     permissions.CAMERA, 
     function(status) { 
     if(!status.hasPermission) errorCallback(); 
     }, 
     errorCallback); 
    } 
} 

控制檯總是說:「攝像頭權限未打開」並沒有權限對話框顯示。

然後我再次搜查,發現該解決的問題,它`答案,所以我安裝了「科爾多瓦 - 插件診斷」,並試圖將此代碼:

function requestPermission(){ 
    cordova.plugins.diagnostic.requestRuntimePermission(function(status){ 
     switch(status){ 
      case cordova.plugins.diagnostic.runtimePermissionStatus.GRANTED: 
       console.log("Permission granted (or already granted) - call the plugin"); 
       // call SQLite plugin 
       break; 
      case cordova.plugins.diagnostic.runtimePermissionStatus.DENIED: 
       console.log("Permission denied - ask again"); 
       alert("Come on user, we really need this. I'll ask again..."); 
       requestPermission(); 
       break; 
      case cordova.plugins.diagnostic.runtimePermissionStatus.DENIED_ALWAYS: 
       console.log("Permission permanently denied"); 
       alert("Well that's it, we're dead Jim"); 
       navigator.app.exitApp(); 
       break; 
     } 
    }, function(error){ 
     console.error("The following error occurred: "+error); 
    }, cordova.plugins.diagnostic.runtimePermission.READ_PHONE_STATE); 
} 
requestPermission(); 

應用程序關閉,沒有對話也表示,我想我不能得到這個插件應該做什麼,我如何獲得打開圖庫的權限。如果有人能給我完整的例子打開畫廊,並選擇權限的形象,這將是很大的幫助。

對不起,我的英語,感謝您的耐心等待。

+0

試試這個,可能是工作stackoverflow.com/a/41221852/5488468 –

+0

你嘗試完全卸載你的應用程序並重新安裝?這可能會清除以前被拒絕的權限,併爲您提供全新的開始。 – Alex

回答

0

我不熟悉你所使用的插件,但我還是能夠使用cordova-plugin-settings-hook這些類型的條目在我的config.xml文件,以解決類似的問題:

<platform name="android"> <config-file parent="/*" platform="android" target="AndroidManifest.xml"> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

要使用以上設置在你的config.xml中,你還需要編輯widget屬性來包含一個附加屬性:xmlns:android="http://schemas.android.com/apk/res/android"

+0

問題是,android 6.0需要運行時權限,所以我如何在運行時請求使用JavaScript的權限。 –

+0

您應該可以使用圖像選擇器插件,而無需使用JavaScript明確請求許可。基於上面所示的方法,許可請求將在第一次使用時自動發生一次。您仍然需要將通用錯誤處理添加到圖像選擇器代碼,以處理用戶是否拒絕了請求。你回來的錯誤信息應該表明這一點。 –

0

親愛的,我有同樣的問題。請求的對話框沒有出現。在我的代碼集中後,我發現var permissions = cordova.plugins.permissions是在DeviceReady()函數中定義的,另一方面,我調用checkPermissionCallback()作爲不在DeviceReady()函數中的回調函數var權限未在該函數中定義(範圍不同)。所以checkPermissionCallback必須在DeviceReady()函數中定義。

0

我能夠通過向platforms/android/AndroidManifest.xml添加相關權限和功能來獲取顯示的權限請求。

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.FLASHLIGHT" /> 
<uses-feature android:name="android.hardware.camera" android:required="true" /> 
相關問題