为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2022-05-12 17:38:12
我需要在某些显示相机预览的活动中请求相机和位置surfaceview许可。我需要把请求权限功能放在哪里?onCreate、onResume还是onSurfaceCreated?我需要在哪里设置相机?
查看完整描述

3 回答

?
慕妹3146593

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 阶段相同)


查看完整回答
反对 回复 2022-05-12
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

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

在java文件中,

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

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


查看完整回答
反对 回复 2022-05-12
?
千万里不及你

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.

    }

}


查看完整回答
反对 回复 2022-05-12
  • 3 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信