1

Android 6+権限のこの奇妙なコンセプトは、ユーザーが位置情報戦略の許可を受けなければならない場合、どのように機能するのでしょうか?私は詳細を意味する:新しい許可の概念は、彼がアプリ内で特別な機能を使用したいと思う瞬間に、ユーザに許可の許可のポップアップを表示する必要があります。これはlocationManager.requestLocationUpdates(...)とどのように機能しますか? manualあなたはできるだけ早くあなたの アプリケーションが起動するように、またはユーザーが特定の機能を有効にした後にのみ位置情報の更新のためのリスニングを開始したい場合がありますAndroid 6+許可の概念と位置情報の方針

を言います。

私はアプリの起動時にパーミッションポップアップを表示すると、このパーミッションコンセプトは意味をなさないでしょう。ユーザは理由を知らずにパーミッションを受け入れる必要があるからです。私がlocationManager.requestLocationUpdates(...)を実行したときに、位置マネージャーが私が知る限り適切な位置を得るのに十分な速さではありません(テストするのは難しいので、わかりません)。 ロケーションマネージャを使用する場合のAndroid 6以降のアクセス許可の正しい実装の概念は何ですか?

答えて

1

スタートアップ時の場所については、ユーザーに許可を求めることをお勧めします。あなたはインストールごとに一度だけ許可を求める必要があるので、それほど迷惑ではありません。ユーザーがあなたの許可を許可した場合、他のことについて心配する必要はなく、ユーザーはあなたのアプリを引き続き使用することができます。しかし、彼がそれを否定するなら、あなたのアプリがこの許可を必要とする理由を説明するポップアップダイアログを彼に提示する方が良いでしょう。彼が依然として拒否している場合は、彼が強制的にアプリを離れるか、以前に許可を求めた機能を制限するかを選択できます。

このofficial doc

+0

権限が与えられていないときに、場所ボタンを無効にすると思います。 – Bevor

0

が起動時に許可を求める参照してくださいは、特定の権限に関連するすべての機能を無効にするのに役立ちます。必要に応じて、本当に必要なときに許可を求めてユーザーの応答を確認することができます。あるDOのための3つの基本的な方法:

  • checkSelfPermission(。あなたは、特定のアクセス許可が付与されているかどうかを確認)
  • shouldShowRequestPermissionRationale(あなたが許可を要求するための根拠とUIを表示するかどうかを取得します。あなたはこれを行う必要があります。あなたが許可を得ておらず、許可が要求されているコンテキストが、この許可を与えることから得られる利益を明確にユーザに伝えていない場合に限る)。
  • requestPermissionsマニフェストでアクセス許可を要求する必要があります)
  • あなたは onRequestPermissionsResultコールバックメソッド(注に付与されたユーザ権限をチェックする必要があり
    public boolean checkPermission(int requestCode, int permissionExplanation, OnRequestPermissionCallback listener, String... permissions) { 
         boolean permissionGranted = true; 
         for (String permission: permissions) { 
          if(ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED){ 
           permissionGranted = false; 
           break; 
          } 
         } 
         if (!permissionGranted) { 
          // Should we show an explanation? 
          boolean shouldShowRequestPermissionRationale = true; 
          for (String permission: permissions) { 
           if(!ActivityCompat.shouldShowRequestPermissionRationale(this, permission)){ 
            shouldShowRequestPermissionRationale = false; 
            break; 
           } 
          } 
          if (shouldShowRequestPermissionRationale) { 
           // Show an explanation to the user *asynchronously* -- don't block 
           // this thread waiting for the user's response! After the user 
           // sees the explanation, try again to request the permission. 
    
           ActivityUtils.showAlertInfoMessage(this, getString(permissionExplanation), getString(R.string.dialog_information), v -> { 
            ActivityCompat.requestPermissions(this, permissions, requestCode); 
           }, false); 
    
          } else { 
    
           // No explanation needed, we can request the permission. 
           ActivityCompat.requestPermissions(this, permissions, requestCode); 
          } 
          return false; 
         } 
         return true; 
        } 
    

    は:このメソッドは、活動中のコールを取得

例えば、あなたが動的な要求権限を処理するためのワークフローを作成することができ、これらの三つの方法を組み合わせます私はActivityCompatからFragmentからonRequestPermissionsResultを処理したい場合は、代わりにFragmentCompatを使用する必要があります。フラグメントには、抽象メソッドonRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)を含むFragmentCompat.OnRequestPermissionsResultCallbackを実装する必要があります。詳細はhttps://developer.android.com/reference/android/support/v13/app/FragmentCompat.htmlを参照してください。

+0

私の質問は、一般的なアクセス許可の実装方法ではなく、とにかく感謝して、新しいアクセス許可モデルと共に複雑なロケーションワークフローを処理することです。 – Bevor

+0

私は全体の画像を提供します。あなたがする必要があるのは、私が投稿したメソッドに類似したもので、 'locationManager.requestLocationUpdates(...)'を呼び出す前に、 – leobelizquierdo

関連する問題