首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ACCESS_FINE_LOCATION权限

ACCESS_FINE_LOCATION权限
EN

Stack Overflow用户
提问于 2017-10-24 16:48:59
回答 1查看 6.5K关注 0票数 0

我一直试图找出如何正确设置CAMERAACCESS_FINE_LOCATION在23+上的安卓权限。

我的程序将请求CAMERA,但它不会在运行时请求ACCESS_FINE_LOCATION权限。

我读过权限位置开发人员页面,但我似乎无法理解如何正确地请求权限。我也通过堆叠寻找答案,但仍然不明白。

有人能解释我在代码中做错了什么,以及如何修复它吗?

我的代码:

代码语言:javascript
复制
    private void connectCamera() {
    CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) ==
                    PackageManager.PERMISSION_GRANTED) {
                cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler);
            } else {
                if (shouldShowRequestPermissionRationale(android.Manifest.permission.CAMERA))  {
                    Toast.makeText(this,
                            "Video app required access to camera and location", Toast.LENGTH_SHORT).show();
                }
                requestPermissions(new String[]{android.Manifest.permission.CAMERA,
                        android.Manifest.permission.ACCESS_FINE_LOCATION,
                        Manifest.permission.ACCESS_COARSE_LOCATION
                }, REQUEST_CAMERA_PERMISSION_RESULT);
            }

        } else {
            cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler);
        }
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}


    @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_CAMERA_PERMISSION_RESULT) {
        if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(getApplicationContext(),
                    "Application will not run without camera and location services!", Toast.LENGTH_SHORT).show();
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-24 16:55:01

在您提供的代码中,您没有要求任何地方的权限。要询问位置特性,可以尝试下面的示例:

代码语言:javascript
复制
ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_CODE_FINE_GPS);

而且,一旦用户允许使用此功能,您就不会让应用程序打开相机。

onRequestPermissionsResult()方法中,应该添加一个else调用openCamera

就像这样:

代码语言:javascript
复制
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_CAMERA_PERMISSION_RESULT) {
        if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(getApplicationContext(),
                    "Application will not run without camera and location services!", Toast.LENGTH_SHORT).show();
        }
        else {
            cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mBackgroundHandler);
        }
    }
}

验证步骤大致如下:

  1. 当应用程序打开时,检查API >= 23是否
  2. 如果是API >= 23,请检查权限是否已经授予。
  3. 如果不是的话,就请求许可。
  4. 请求的结果将在onRequestPermissionsResult()方法上。您必须处理那里的用户输入。如果他没有给予许可,并且这个功能是你的应用程序运行所必需的,那么显示一个对话框,或者其他解释为什么他应该给你许可的东西,然后再问一遍。
  5. 如果得到了许可,那就获利了。调用将使用该功能的应用程序上的方法。

看看这个答案。那个家伙创建了一个很好的助手方法来检查和请求你可能需要的任意数量的权限。然后,您只需在onRequestPermissionsResult()上处理它们。

P.S.: I强烈建议您重新阅读关于如何请求API 23+权限的医生们,您的问题表明您不理解请求权限的基本概念。另外,请查看安卓培训页面的此链接这个相关的问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46915957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档