2017-10-24 3 views
0

私はAPI 23+のCAMERAACCESS_FINE_LOCATIONのアンドロイドのアクセス許可を正しく設定する方法を見つけようとしています。ACCESS_FINE_LOCATIONのアクセス許可

私のプログラムはCAMERAを要求しますが、実行時にACCESS_FINE_LOCATIONのアクセス権を要求しません。

私はpermissionslocationの開発者ページを読みましたが、アクセス許可を正しく要求する方法を理解できていないようです。私も答えをstackoverflowを見ているが、まだ理解していない。

誰かが私のコードで間違っていることを説明でき、それを修正する方法はありますか?

マイコード:

private void connectCamera() { 
    CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 
    try { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) == 
        PackageManager.PERMISSION_GRANTED) { 
       cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler); 
      } else { 
       if (shouldShowRequestPermissionRationale(android.Manifest.permission.CAMERA)) { 
        Toast.makeText(this, 
          "Video app required access to camera and location", Toast.LENGTH_SHORT).show(); 
       } 
       requestPermissions(new String[]{android.Manifest.permission.CAMERA, 
         android.Manifest.permission.ACCESS_FINE_LOCATION, 
         Manifest.permission.ACCESS_COARSE_LOCATION 
       }, REQUEST_CAMERA_PERMISSION_RESULT); 
      } 

     } else { 
      cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler); 
     } 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 


    @Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if (requestCode == REQUEST_CAMERA_PERMISSION_RESULT) { 
     if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { 
      Toast.makeText(getApplicationContext(), 
        "Application will not run without camera and location services!", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 
+0

問題は解決しましたか? – Mauker

+0

はい。ご協力ありがとうございました。 Androids Camera2 APIについて偶然知っていますか? – goofenhour

+0

大歓迎です!少しは分かりますが、Web上にたくさんのチュートリアルやサンプルコードがあります。何かを見つけるのが難しい場合は、新しい質問をしてください:) – Mauker

答えて

2

あなたはどこでもあなたが提供されているコードでアクセス権を求めていません。場所の機能を求めるためには、以下の例を試すことができます。また

ActivityCompat.requestPermissions(this, 
       new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
       REQUEST_CODE_FINE_GPS); 

は、ユーザーがこの機能を使用する許可を与えたら、あなたのアプリがカメラを開く行っていません。

onRequestPermissionsResult()メソッドでは、elseを追加する必要があります。openCameraを追加してください。このような

何か:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if (requestCode == REQUEST_CAMERA_PERMISSION_RESULT) { 
     if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { 
      Toast.makeText(getApplicationContext(), 
        "Application will not run without camera and location services!", Toast.LENGTH_SHORT).show(); 
     } 
     else { 
      cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler); 
     } 
    } 
} 

検証手順はおおよそ以下のようなものです:

  1. アプリを開くと、それはAPIならAPI> = 23
  2. かどうかをチェック> = 23、許可が既に与えられているかどうか確認してください。
  3. そうでない場合は、許可を求めます。
  4. リクエストの結果はonRequestPermissionsResult()メソッドになります。そこにユーザー入力を処理する必要があります。彼が許可を与えておらず、この機能があなたのアプリの実行に欠かせない場合は、ダイアログを表示するか、なぜあなたに許可を与えるべきなのかを説明し、再度尋ねます。
  5. 許可が与えられた場合、利益を得ます。その機能を使用するアプリケーション上のメソッドを呼び出します。

this answerをご覧ください。その人はあなたが必要とする可能性のあるいくつかの許可を確認して尋ねる素晴らしいヘルパーメソッドを作成しました。次に、onRequestPermissionsResult()でそれらを処理する必要があります。

P.S:私は強くはあなたがすることをお勧めします API 23+のパーミッションを要求する方法についてthe docsを再読み込み、あなたの質問は、あなたが要求して許可の基本的な概念を理解していなかったことを示しています。また、Androidトレーニングページのthis linkthis related questionを確認してください。

+0

ありがとうございます。私の場所のアクセス許可を設定するための推奨事項はありますか? – goofenhour

+0

これは同じワークフローです。場所の機能を使用する必要がある場合は、その権限をチェックし、必要がない場合はユーザーに確認します。 – Mauker

+0

また、GPS位置情報は、API 23+ – Mauker

関連する問題