在哪里放置相机请求权限?

Where to place request permission for camera?

我需要在某些 activity 中请求 cameralocation 权限,在 [=10= 中显示相机预览].

请求权限函数需要放在哪里? onCreateonResumeonSurfaceCreated?

我需要在哪里设置相机?

首先,在清单文件中定义权限。

在java文件中,

您必须在运行时使用 checkSelfPermission 再次请求权限。这是非常必要的,因为如果您的用户没有授予他将无法访问相机的权限。当您希望相机真正出现时,您应该编写这段代码以及与相机相关的所有功能。

例如,如果有一个按钮说Open Camera,那么首先检查用户是否授予权限,然后打开相机。

看到请求权限直接对应应用程序崩溃,如果请求服务而权限不可用。 我更愿意将权限放在 onResume 中,因为无论用户操作变成什么,例如最小化或屏幕顶部出现电池电量不足的对话框,我们都需要再次检查权限更改,以便您 activity 更改可能已经通过什么发生曾经的理由。网络请求后相机正在尝试打开或者是什么情况。

将摄像头检查权限放在onResume中。

那么让我们谈谈你会怎么做。 有许多看法。我更喜欢做的是 我创建了一个 Helper class 让我知道使用此代码

的权限状态
class PermissionsHelper(activity: Activity) {
private val activity: Context

init { this.activity = activity }

fun isCameraPermissionAvailable()=ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED

}

}

因此在您的 activity 的 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阶段相同)

您可以在使用该服务之前将权限放在任何地方。从技术上讲,这并不重要。但是通过启动屏幕请求许可,提供需要许可的原因或在使用服务之前请求许可是用户友好的。

根据 Android documentation 请求许可的最相关位置可能是

every time you perform an operation that requires that permission.

这种推荐背后的原因是从 Android 6.0(API 级别 23)开始,用户可以随时撤销任何应用程序的权限。因此,即使该应用昨天使用了摄像头,也不能假定它今天仍然拥有该权限。

因此,应用每次都必须 "check" 才能获得权限,才能执行需要该权限的操作。

您可以设置相机和其他操作"after"用户已授予使用相机的权限。如果用户通过覆盖 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.
    }
}