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

标签 java android android-camera surfaceview android-permissions

我需要在某些在 surfaceview 中显示相机预览的 Activity 中请求相机位置权限。

我需要把请求权限函数放在哪里? onCreateonResume 还是 onSurfaceCreated

我需要在哪里设置相机?

最佳答案

如果请求服务而权限不可用,请参阅请求权限直接对应于应用程序崩溃。 我更愿意将权限放在 onResume 中,因为无论用户操作变成什么,例如最小化或屏幕顶部出现电池电量不足的对话框,我们都需要再次检查权限更改,以便您的 Activity 更改可能是由于任何原因发生的。摄像头在网络请求后尝试打开或者是什么情况。

将摄像头检查权限放在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

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

关于java - 在哪里放置相机请求权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54264683/

相关文章:

java - 使用套接字发送 onPreviewFrame() byte[] 的正确方法

java - 从另一个模块导入时找不到maven依赖项

java - James服务器连接失败异常

java - 简单的java聊天室

java - 使用 ObservableBoolean 或 Observable<Boolean> 组合两个可观察的 boolean 值

Android 使用 native 相机保存图像

java - Spring Cloud任务taskLifecycleListener在数据流服务器中运行时出错

android - 如何在 flutter 中将 DateTime 转换为 TZDateTime?

android - 犯奇怪的错误

android - 相机屏幕方向问题三星盖乐世 S3