web-dev-qa-db-ja.com

Androidでカメラの許可を取得する方法(具体的にはMarshmallow)

ちょっと私はAndroid studioでアプリを設計しています。私はカメラの許可が必要です。 AndroidManifest.xmlファイルに<uses-permission Android:name="Android.permission.CAMERA" />を含めました。 Marshmallowを除くAndroidのすべてのバージョンで正常に動作しています。デフォルトでカメラの許可を取得するにはどうすればよいですか?不可能な場合、どのようにユーザーに尋ねますか?

26
Toyas

最初に、ユーザーがアクセス許可を付与したかどうかを確認します。

if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
    == PackageManager.PERMISSION_DENIED)

次に、これを使用してユーザーに要求できます。

ActivityCompat.requestPermissions(activity, new String[] {Manifest.permission.CAMERA}, requestCode);

マシュマロでは、ダイアログに表示されます

48
Serch

次のコードを試して、マシュマロでカメラの許可をリクエストできます。最初に、ユーザーが許可を付与しているかどうかを確認します。ユーザーが許可を付与していない場合は、カメラの許可を要求します。

private static final int MY_CAMERA_REQUEST_CODE = 100;

if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_REQUEST_CODE);
}

許可を要求すると、ダイアログが表示され、allowおよびdenyオプションを含む許可を要求します。アクションをクリックすると、次の方法でリクエストの結果を取得できます。

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == MY_CAMERA_REQUEST_CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
        }
    }
}
31

RxPermission は、コードを1行にした最適なライブラリです。

カメラの許可の場合、回避策は次のようになります。

1)まず、manifest.xmlにこの許可を追加します。

<uses-permission Android:name="Android.permission.CAMERA" />

2)次に、実行時許可を求めます。

 new RxPermissions(this)
.request(Manifest.permission.CAMERA) // ask single or multiple permission once
.subscribe(granted -> {
    if (granted) {
       // All requested permissions are granted
    } else {
       // At least one permission is denied
    }
});

このライブラリをbuild.gradleに追加します

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.1'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
}

これは簡単ではないですか?

4
Khemraj
check using this
if (ContextCompat.checkSelfPermission(this, Android.Manifest.permission.CAMERA)
            == PackageManager.PERMISSION_DENIED)

そして

2
Kogile

これは私にとってはうまくいきます、ソースは here です

int MY_PERMISSIONS_REQUEST_CAMERA=0;
        // Here, this is the current activity
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
        {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA))
            {

            }
            else
            {
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA );
                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        }
1
cmujica