したがって、このまったく新しい Android ランタイムのアクセス許可は、私を混乱させました。私のアプリは現在、バージョン 23 をコンパイルしてターゲットにしているため、実行時のアクセス許可を使用する必要があります。私のアプリは主にカメラのアクセス許可を必要とするカメラ API を使用するため、カメラを開く前にランタイムのアクセス許可を追加しました。
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED)
{//ask permissions for camera
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
CameraPermissions);
}
else
{//permissions attained now you can open the camera
camera=Camera.open(getCid());
camera.setPreviewCallback(this);
initPreview(width, height);
startPreview();
startTimer();
}
カメラを停止するときも確認します。
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
camera.setPreviewCallback(null);
camera.release();
faceProc.release();
faceProc = null;
camera = null;
inPreview = false;
cameraConfigured = false;
}
許可要求は次のように処理されます。
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case CameraPermissions: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
StartUpCam();
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("How is this app going to work if you rejected the camera permission.... DUHHHH!!")
.setTitle("Rejected");
builder.setPositiveButton("Exit App", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//close application
closeApp();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
return;
}
}
}
そのため、リクエストが与えられると、 StartUpCam が呼び出され、権限が与えられた場合にカメラを開こうとします。ここで私の質問があります。このランタイム許可チェックを追加すると、これは 6.0 より前の Android デバイスにどのように影響しますか?? バージョン 5.0.1 の電話でも、カメラの許可を求めるプロンプトが表示されるのでしょうか? 実行時のアクセス許可を使用する場合、マニフェスト ファイルでカメラのアクセス許可を削除する必要がありますか? 現在、マニフェストにカメラのアクセス許可と、それが正しいかどうかわからない実行時のアクセス許可を保持しています。ターゲットを下げ、sdk を 23 ではなく 22 にコンパイルすると、6.0 を超える Android デバイスでアプリをダウンロードできなくなりますか? バージョン 22 に下げると、この頭痛の種をすべて回避できます...