3 回答
TA贡献1820条经验 获得超9个赞
见请求权限直接对应应用程序崩溃如果请求服务并且权限不可用。我更愿意将权限放在 onResume 中,因为无论用户操作变成什么,例如最小化或电池电量不足对话框出现在屏幕顶部,我们都需要再次检查权限更改,以便您的活动更改可能是由于任何原因而发生的。在网络请求或情况如何之后,摄像头正在尝试打开。
将相机检查权限放在onResume中。
所以让我们谈谈你会怎么做。有几种看法。我更喜欢做的是创建一个Helper类,让我知道这段代码的权限状态
class PermissionsHelper(activity: Activity) {
private val activity: Context
init { this.activity = activity }
fun isCameraPermissionAvailable()=ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
}
}
因此,在您的活动的onResume方法中检查权限是否可用,否则请求权限。
override fun onResume() {
super.onResume()
if (!PermissionsHelper(this).isCameraPermissionAvailable()) {
requestPermissions(arrayOf(Manifest.permission.CAMERA), CAMERA_REQUEST_CODE)
}
}
另外请注意两点
1) You should write permission for camera in manifeast so that app can request the permission
2) Check if the camera permission is available or not before opening the camera, if not you should again request for the permission
(与 onResume 阶段相同)
TA贡献1827条经验 获得超9个赞
首先,在清单文件中定义权限。
在java文件中,
您必须在运行时使用 再次请求权限checkSelfPermission
。这是非常必要的,因为如果您的用户没有授予他将无法访问相机的权限。当您希望相机实际显示时,您应该编写此代码以及与相机相关的所有功能。
例如,如果有一个按钮说,Open Camera
那么首先检查用户是否授予权限,然后打开相机。
TA贡献1784条经验 获得超9个赞
根据Android 文档,请求许可的最相关的地方可能是
每次执行需要该权限的操作时。
这种建议背后的原因是从 Android 6.0(API 级别 23)开始,用户可以随时撤销任何应用程序的权限。因此,即使应用程序昨天使用了相机,它也不能假设它今天仍然拥有该权限。
因此,应用程序必须每次都“检查”权限,以执行需要该权限的操作。
您可以在用户授予使用相机的权限“之后”设置相机和其他操作。如果用户通过覆盖授予权限,您可以检查状态onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_CAMERA: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// camera-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request.
}
}
添加回答
举报