web-dev-qa-db-ja.com

Android M許可ダイアログのカスタムテキストを提供します

ユーザーに権限の付与を求められたときに表示されるシステムダイアログのカスタムテキストを提供することは可能ですか?

23
rfsk2010

いいえ、ダイアログのテキストをカスタマイズすることはできませんが、許可を要求する前に説明を提供できます。 developer.Android.com からの引用:

リクエスト権限

アプリがアプリマニフェストに記載されている危険な権限を必要とする場合、その権限を付与するようユーザーに要求する必要があります。 Androidには、権限をリクエストするために使用できるいくつかのメソッドが用意されています。これらのメソッドを呼び出すと、カスタマイズできない標準のAndroidダイアログが表示されます。

アプリに権限が必要な理由を説明してください

状況によっては、アプリが権限を必要とする理由をユーザーに理解してもらいたい場合があります。たとえば、ユーザーが写真アプリを起動した場合、おそらくアプリがカメラの使用許可を求めることに驚かないでしょうが、ユーザーはアプリがユーザーの場所や連絡先へのアクセスを求めている理由を理解していない可能性があります。許可を要求する前に、ユーザーに説明を提供することを検討する必要があります。説明でユーザーを圧倒したくないことに注意してください。説明が多すぎると、ユーザーはアプリに不満を感じて削除する可能性があります。

使用できるアプローチの1つは、ユーザーが既にそのアクセス許可要求を拒否している場合にのみ説明を提供することです。ユーザーがアクセス許可を必要とする機能を引き続き使用しようとしているが、アクセス許可要求を拒否し続ける場合は、おそらく、ユーザーがアプリがその機能を提供するためにアクセス許可を必要とする理由を理解していないことを示しています。このような状況では、説明を表示することをお勧めします。

ユーザーが説明を必要とする可能性のある状況を見つけるのに役立つように、Androidはユーティリティメソッド shouldShowRequestPermissionRationale() を提供します。アプリが以前にこの権限をリクエストした場合、このメソッドはtrueを返しますユーザーはリクエストを拒否しました。

26

リクエストの許可ダイアログをカスタマイズすることはできませんが、ユーザーにカスタムの説明を提供することはできますが、以下でリクエストする理由はカスタムの説明を含むメソッドであるためです

   private void checkForCameraPermission() {
    // Here, thisActivity is the current activity
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
            AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
            alertBuilder.setCancelable(true);
            alertBuilder.setTitle("Camera permission necessary");
            alertBuilder.setMessage("FITsociety need camera permission to read barcode.");
            alertBuilder.setPositiveButton(Android.R.string.yes, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ActivityCompat.requestPermissions(BarCodeScannerActivity.this,
                            new String[]{Manifest.permission.CAMERA},
                            MY_PERMISSIONS_REQUEST_CAMERA);
                }
            });

            AlertDialog alert = alertBuilder.create();
            alert.show();
        } else {
            // No explanation needed, we can request the permission.
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CAMERA},
                    MY_PERMISSIONS_REQUEST_CAMERA);
            // MY_PERMISSIONS_REQUEST_CAMERA is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    } else {
        setBarCodeScannerView();
    }
}

上記のメソッドは、権限がすでに付与されているかどうかをチェックし、そうでない場合は、このメソッドでカスタム説明が必要かどうかをチェックします

ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)

このメソッドのドキュメントはここにあります shouldShowRequestPermissionRationale() このメソッドは、ユーザーが許可ダイアログを拒否するか、ユーザーがアプリケーションの設定から許可を閉じた場合にのみtrueを返します。それがうまくいくことを願ってさらに進みます

13
rana_sadam