2016-11-07 144 views
0

我只需要一种方法来获得使用智能手机相机的权限。 我写了这段代码,但没有出现权限请求对话框。如何授予相机权限?

在OnCreate:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

    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}, 1); 
     } 
    } 

} 



@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case 1: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // my code after granted permission 

      } else { 


      } 
      return; 
     } 
    } 
} 
+0

当您在调试器中逐步浏览代码时,您学到了什么?你真的调用'requestPermissions()'吗? – CommonsWare

+0

@CommonsWare不,requestPermissions()不会被调用,因为“ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CAMERA)”为true。 – xRobot

回答

1

requestPermissions()不叫,因为 “ActivityCompat.shouldShowRequestPermissionRationale(这一点,Manifest.permission.CAMERA)” 成立

第1步:显示一些基本原理(对话框,快餐栏,在你的用户界面内的东西,无论什么)

步骤#2:当用户点击该基本UI (例如,OK按钮),请致电requestPermissions()

或者,如果您不想显示为什么要申请许可的理由,请不要拨打shouldShowRequestPermissionRationale()

+0

以及如果我想在用户打开应用程序时显示权限请求,该如何处理? – xRobot

+1

@xRobot:恩,执行你问题中的代码,并在我的答案中显示修改。请注意,由于您正在使用'ContextCompat'和'ActvityCompat',因此您不需要版本检查。 – CommonsWare