2015-10-21 10 views
20

は、私は次のように実行時に許可を要求するとしますAndroidで許可ダイアログをカスタマイズするにはどうすればよいですか?

ActivityCompat.requestPermissions(thisActivity, 
      new String[]{Manifest.permission.READ_CONTACTS}, 
      MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

Androidシステムは、許可を要求するポップアップダイアログを作成します。そのダイアログのカスタムレイアウトを定義するにはどうすればよいですか?

+1

http://stackoverflow.com/questions/32097218/android-m-custom -permission-dialog-style –

答えて

35

短い答えはです。はできません。 Androidのドキュメントとして

を置く:

をあなたのアプリがrequestPermissions()を呼び出すと、システムは、ユーザに標準のダイアログボックスを示しています。あなたのアプリはできませんそのダイアログボックスを設定するか、または変更してください。ユーザーに情報や説明を提供する必要がある場合は、「アプリケーションにアクセス許可が必要な理由を説明する」の説明に従って、requestPermissions()を呼び出す前にそれを行う必要があります。

したがって、今のところ許可ダイアログボックスのカスタムレイアウトを定義する方法はありません。

あなたはここで、より詳細な情報を見つけることができます:http://developer.android.com/training/permissions/requesting.html

+1

"android ...あなたがその許可を要求している理由を説明するテキストをそのダイアログに追加することができます" - 私が認識しているものではありません。 – CommonsWare

+0

@CommonsWare私は、開発者がその許可を使用する根拠が間違っていることを説明できると思いましたか?または単にアンドロイドがその許可についてのデフォルトの説明を表示していますか? – yrazlik

+2

'shouldShowPermissionRequestRationale()'を使って、説明を表示したいかどうかを調べることができます。ただし、独自のUIでそれを行う必要があります。そのためにシステムダイアログに散文を追加することはできません。 – CommonsWare

9

を私は許可をカスタムダイアログを作成しています

if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
    if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) { 
     AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); 
     alertBuilder.setCancelable(true); 
     alertBuilder.setTitle("Permission necessary"); 
     alertBuilder.setMessage("External storage permission is necessary"); 
     alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 

     @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
     public void onClick(DialogInterface dialog, int which) { 
      ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);}}); 

     AlertDialog alert = alertBuilder.create(); 
     alert.show(); 
    } else { 
      ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);} 
    return false;} 
else { 
    return true; 
} 

希望これがお手伝いします:)

関連する問題