1

私のcordovaアプリケーション用の 'imagepicker'プラグインを使用して、モバイルギャラリーから画像を取得して使用することに参加しています。私はアンドロイド6.0デバイスで私のアプリをテストしています。これは問題です.Marshmallow Android 6.0は、古いバージョンのようには実行時のアクセス許可では必要ありません。 "古いバージョンでは動作していますが、api 23以降では、すぐに終了し、アプリがクラッシュします。私が検索したとき、私はそれを行う許可が必要であることがわかった。私は、「Androidの許可コルドバプラグイン」を使用し始め、彼らは、このページで提示された例をコピーして:https://www.npmjs.com/package/cordova-plugin-android-permissionsCordova App 'Android permission Cordova Plugin'が許可ダイアログを表示していません

である:

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(); 

近いアプリと何のダイアログも示しています

その後、私は再び検索し、この解決質問とそれ `sの答えを見つけたので、私は「コルドバ・プラグイン・診断」インストールして、このコードを試してみました私はこのプラグインをどうすればいいのですか、どうすればギャラリーを開く権限を得ることができるのでしょうか?誰かがギャラリーを開いて許可を得て画像を選んだら完全な例を教えてくれれば大きな助けになるだろう。

私の英語は申し訳ありません。

+0

それが仕事stackoverflow.com/a/41221852/5488468 –

+0

かもしれこれを試してみてください、あなたは完全にあなたのアプリをアンインストールし、それを再インストールしようとしていますか?これにより、以前に拒否されたアクセス許可がフラッシュされ、新しく始めることができます。 – Alex

答えて

0

私はあなたが使用するプラグインに慣れていないんだけど、私は同様の問題に対処するために、私のconfig.xml内のエントリのこれらの種類とcordova-plugin-settings-hookを使用することができました:

<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属性を編集する必要があります。

+0

問題は、Android 6.0には実行時アクセス許可が必要なため、実行時にJavaScriptを使用してアクセス許可を要求するにはどうすればよいですか。 –

+0

JavaScriptを使用して明示的に権限を要求しなくても、イメージピッカーのプラグインを使用できるはずです。許可リクエストは、上記の方法に基づいて、自動的に1回目の使用で自動的に発生します。ユーザーが要求を拒否した場合は、画像ピッカーコードに汎用エラー処理を追加して処理する必要があります。戻ってくるエラー情報は、これを示すはずです。 –

0

私は同じ問題があった。要求ダイアログボックスは表示されませんでした。私のコードにいくつかの集中した後、私は、var permissions = cordova.plugins.permissionsがDeviceReady()関数で定義され、反対側で私はDeviceReady()関数ではないコールバック関数としてcheckPermissionCallback() 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" /> 
関連する問題