Cordova tips - Android 6 の Runtime Permission に対応する方法

phi phi on cordova, android

久々にハマったので備忘録がてら書きます.

Runtime Permission とは?

Runtime Permission とはその名の通り, 実行時にパーミッションの許可確認を行うもので Android 6 から採用された方式です.

android permission

Cordova で開発する際の注意点

Android 5 までは, インストール時にパーミッションを確認する方式だったので,
カメラや外部ストレージを使う際もあまり意識してなかった方が多いのではないでしょうか?

Cordova でも同様です.

ですが Android 6 からはこの Runtime Permission を意識して作らないと ハマる場面が多々あります.

例えば <input type='file' /> によるカメラ or ドキュメントへのアクセス. 今まで通り置いておくだけだと, 単純にカメラが起動してしまったり, 選択できるアプリケーションがありません と出てしまいます.

これらの対応方法としては, input 要素を選択する前にネイティブの Permission リクエストを送り許可しておく必要があります.

Cordova で Permission リクエストを送る方法

ここが本題ですね.
Cordova で Permission リクエストを送るには『cordova-plugin-android-permission』 というプラグインを使います.

インストール

$ cordova plugin add [email protected]

パーミッションを許可しているかをチェック

var permissions = cordova.plugins.permissions;  
// カメラの場合
permissions.hasPermission(permissions.CAMERA, function(status) {  
  console.log(status.hasPermission); // true or false
}, null);

パーミッションの許可リクエストを送る方法

確認ダイアログが表示され, 許可すれば true, 拒否すれば falsestatus.hasPermission として返ってきます.

var permissions = cordova.plugins.permissions;  
// カメラの場合
permissions.requestPermission(permissions.CAMERA, function(status) {  
  console.log(status.hasPermission); // true or false
}, null);

ちなみに例で挙げた <input type='file' /> の場合は WRITE_EXTERNAL_STORAGE を許可してあげれば解決します.

var permissions = cordova.plugins.permissions;  
// カメラの場合
permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, function(status) {  
  console.log(status.hasPermission); // true or false
}, null);

android permission camera

Reference