2015-10-05 35 views

回答

19

不,你不能自定義對話框中的文本,但你可以請求之前提供解釋的權限。從developer.android.com報價:

請求權限

如果您的應用程序需要的是在應用 清單中列出一個危險的權限,它必須向用戶授予權限。 Android 提供了幾種可用於請求許可的方法。調用 這些方法會調出一個標準的Android對話框,您無法自定義 。

解釋爲什麼應用程序需要的權限

在某些情況下,你可能想幫助用戶理解爲什麼 您的應用程序需要的權限。例如,如果用戶啓動了一個 攝影應用程序,用戶可能不會感到驚訝的是應用程序 要求許可使用攝像頭,但用戶可能不知道爲什麼該應用程序想要訪問用戶的位置或 聯繫人。在您申請許可之前,您應該考慮 向用戶提供解釋。請記住,你不希望 用解釋壓倒用戶;如果您提供的解釋太多,用戶可能會發現該應用令人沮喪並將其刪除。您可以使用

一種方法是爲只在 用戶已經拒絕了該許可請求的解釋。如果用戶保持 嘗試使用需要許可但保留 拒絕許可請求的功能,這可能表示用戶 不明白爲什麼應用程序需要提供該功能的權限。在這樣的情況下, 顯示一個解釋可能是一個好主意。

爲了幫助找到用戶可能需要說明的情況, Android提供了一種實用方法, shouldShowRequestPermissionRationale()。如果此應用程序先前已請求此許可,並且用戶拒絕 請求,則此方法返回true。

9

我們不能自定義請求允許對話,但我們可以提供用戶自定義的解釋就是爲什麼我們要求下面是使用自定義的解釋方法

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()這個方法還真只有如果用戶拒絕權限對話框或用戶關閉應用程序設置的權限(如果用戶這樣做),則顯示帶自定義解釋的警報對話框,並繼續進一步指望它可以工作