質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Monaca

    1112questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Android6移行のカメラの許可

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,803

mastetu0128

score 2

前提・実現したいこと

```
お世話になります。monacaにてAndroidアプリを製作中です。
ほぼ完成となり、ベータ版をPlayStoreへ掲載しております。
Android実機は4.4系、5.x系、6.x系を所有しており、各端末での動作テストをしております。Android4,5系はインストール時に、カメラ使用の許可ダイアログが表示され、インストール完了すれば問題無く使用が可能ですが、Android6ではインストール時のカメラ使用の許可問合せがなく、アプリ内でカメラを起動しようとすると、エラーで起動できなくなっています。 原因はAndroid6からのruntime permissionであるとわかっておりますが、これを回避していく方法として、下記の2点を考えております。

1.monacaで、スマホのカメラにおけるpermissionを取得して、許可されていない場合には、許可のダイアログを表示する。もしくは、設定ページにジャンプし、カメラ使用の許可をとる。

2.ビルド時、アプリインストール時に許可を求めるようなビルドの仕方とする。Android6からの仕様変更なのですが、sdkバージョンを22以下にしておけば、旧来通りのインストールができるそうです。

試したこと

上記1にて、cordovaプラグインのcordova-plugin-android-permissionsをimportし、npmに記載の下記のコードを試しました。
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);
}
}
monaca上ではhasPermissionが見えない、というようなエラーメッセージが表示されていました。 オブジェクトモデルがいまいち理解できず、window.pluginsとかcordova.pluginsとか色々変更してみましたが、その機能を使えるような状況にはなりませんでした。

上記2にて、monacaのローカルキットを使った場合、AndroidManifest.xmlがあったので、そこに
<uses-permission android:name="android.permission.CAMERA" />
を追記してみましたが、効果無しでした。 monacaのドキュメントには、AndroidManifest.xmlは既に使わない仕様となっているようで、クラウドIDE上では通常見えないファイルとなっています。ちなみに、sdkバージョンは22となっておりました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

+1

自己解決です。
cordova pluginのdiagnosticを使い、下記のようにすれば、カメラ機能を呼び出す際に許可ダイアログが出て、動作が可能になりました。
Android5までは、インストール前に確認ダイアログが出て、Android6からはインストール時には何もダイアログが表示されず、カメラ機能を使う際に下記のコードを呼出て、許可のダイアログが出るようになりました。

function getBarcode(){
cordova.plugins.diagnostic.requestCameraAuthorization(function(status){
console.log("Authorization request for camera use was " + (status == cordova.plugins.diagnostic.permissionStatus.GRANTED ? "granted" : "denied"));
if(status == cordova.plugins.diagnostic.permissionStatus.GRANTED)
barcode_scan();
}, function(error){
console.error(error);
});
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Monaca

    1112questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。