2017-08-07 9 views
1

私のアプリケーションでは、Camera、AudioInput(Micro)、Storageのアクセス権を要求する必要があります。 Android 6以降、アクセス権を得るには、これらのアクセス許可を実行時に要求する必要があります。ここまでは順調ですね。 これを行うには、hereというIonic 2 Cordova Plugin "Diagnostics"が必要です。Ionic/Angular Diagnostic.requestRuntimePermissionどのように? (Docs incomplete)

ご覧のとおり、このドキュメントは非常に不完全です。 Bluetoothの現在の状態を取得する方法のみを示します。 実際にはどのように実際に許可を受けていますか?スイッチ/ケースを扱うためにどのようなステータスに戻りますか?その情報はすべて必要ですが、ここでは必要ありません。

私が試した限り、何らかのdiagnostic.requestRuntimePermission機能があることがわかりました。

  that.diagnostic.requestRuntimePermission('CAMERA') 
      .then((status) =>{ 
        switch(status){ 
         case "GRANTED": 
          console.log("Permission granted to use the camera"); 
          break; 
         case "DENIED": 
          console.log("Permission denied to use the camera - ask again?"); 
          break; 
         case "DENIED_ALWAYS": 
          console.log("Permission permanently denied to use the camera - guess we won't be using it then!"); 
          break; 
        } 
       }).catch(e => console.error(e)); 

お知らせ::これは私がそれのように見えることができると思うが、私はそれが動作するかどうか知らないだけのコードです。この機能を使用すると、このような何かを行うことができますカメラは、私はこれを行うaviableであるかどうかを確認するには : だから、このうちの仕事に一例として、カメラの許可を取ることができます

let successCallback = (isAvailable) => { console.log('Is available? ' + isAvailable); }; 
let errorCallback = (e) => console.error(e); 
that.diagnostic.isCameraAvailable().then(successCallback).catch(errorCallback); 

その後、私はかどうかを知るために、カメラのAuthorizationSttusを取得する必要があります許可は拒否されているか、まだ要求されていません。これは以下のように動作します:私は私がここで返さ取得述べている知らないので、もう何をすべきかを知らないこの段階では

that.diagnostic.getCameraAuthorizationStatus() 
.then((state) => { 
    switch(state){ 
     /*HERE should I work with the State in order to request permission or not*/ 
    } 
}).catch(e => console.error(e)); 

。 は、私はそれがこのようなものだと思う:このdoesntの仕事

switch(status){ 
    case "GRANTED": 
     console.log("Permission granted to use the camera"); 
     break; 
    case "DENIED": 
     //Here should I now call the PermissionRequest function 
     console.log("Permission denied to use the camera - ask again?"); 
     break; 
    case "DENIED_ALWAYS": 
     console.log("Permission permanently denied to use the camera - guess we won't be using it then!"); 
     break; 
    } 

が、私はそれがそのようなものでなければならないと思います。 だから、私を助けて、私を教えてください:ここで返さ取得し、どのように私はdiagnostics.requestRuntimePermission使用権はどうすればよい

  • それにアクセスします

    • どのステータス?

    Hereは、同じ質問をした元のIonic2フォーラムへのリンクです。

  • 答えて

    0

    あなたは実行時のアクセス許可を要求するために間違ったcordova-pluginを使用していると思います。 diganosticsプラグインは、特定のデバイス機能(カメラなど)が使用可能かどうかを示すためのものです。実行時にアクセス許可を要求するには、Android Permissions pluginをお勧めします。プラグインとして利用できるのはIonic Native wrapperです。

    編集: あなたの正確な質問に答えるために:このためIonic Native wrapper classによる許可状態要求WILLEのための応答をプラグインすると、次のいずれかのプロパティをオブジェクト:あなたのイオンクラスで

    permissionStatus: { 
        GRANTED: string; 
        DENIED: string; 
        NOT_REQUESTED: string; 
        DENIED_ALWAYS: string; 
        RESTRICTED: string; 
        GRANTED_WHEN_IN_USE: string; 
    }; 
    

    ます

    constructor(private diagnostic: Diagnostic){} 
    

    あなたはpermissionStにアクセスすることができます。あなたは次のようにコンストラクタでイオン-ネイティブクラスを注入されたと仮定すると、それを次のようにアクセスすることができます

    let permissionStatus = this.diagnostic.permissionStatus; 
    that.diagnostic.getCameraAuthorizationStatus() 
        .then((state) => { 
        switch(state){ 
         case permissionStatus.GRANTED: 
         console.log("Permission granted to use the camera"); 
         break; 
         case permissionStatus.DENIED: 
         //Here should I now call the PermissionRequest function 
         console.log("Permission denied to use the camera - ask again?"); 
         break; 
         case permissionStatus.DENIED_ALWAYS: 
         console.log("Permission permanently denied to use the camera - guess 
         we won't be using it then!"); 
         break; 
        } 
    }).catch(e => console.error(e)); 
    

    そして、例えば要求する:

    this.diagnostic.permissionStatus 
    

    その後、あなたのスイッチ-case文を書き換えることができます。このようなオブジェクトのATU実行時にカメラの権限:

    let permission = this.diagnostic.permission; 
    this.diagnostic.requestRuntimePermission(permission.CAMERA).then(
        success => { 
        console.log('reuqestCameraAuthroization, success', success); 
        }, 
        error => { 
        console.log('reuqestCameraAuthroization, error', error); 
        }, 
    ); 
    

    しかし、私はあなたがあなたの場合Ionic docs言及として、getCameraAuthorizationStatusは、デフォルトでは、実行時のアクセス許可を要求しますので、permissionStatus.DENIEDまたはpermissionStatus.NOT_REQUESTEDの場合は、実行時のアクセス許可を手動で要求する必要はないと思います「偽」パラメータで呼び出さないでください。

    約束の結果がどのように表示されるかわからない場合は、いつでもコンソールにログに記録できます(console.log(成功)など)。そして、あなたはいつでも注入可能(あなたのケースではこの診断)を記録して、利用可能なパブリックメソッドとオブジェクトを確認することができます。

    +0

    問題は、私が使用しているコードバプラグインが私にとってもiOSもサポートしていることです。また、私が要求されたプレミッション関数を述べたように、それは提供します。彼らは文書化されていません。しかし、あなたはこれらの機能でアクセスすることができます。だからあなたのソリューションはAndroidのみにはいいですが、私はiOSも必要です。 –

    +0

    私の回答が更新されました。今後さらにお役に立てば幸いです! – David

    +0

    まさに私が必要なもの!ありがとうございました! –

    関連する問題