2015-10-05 207 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()这个方法还真只有如果用户拒绝权限对话框或用户关闭应用程序设置的权限(如果用户这样做),则显示带自定义解释的警报对话框,并继续进一步指望它可以工作