ACCESS_FINE_LOCATION权限

时间:2017-10-24 16:49:00

标签: android android-activity

我一直在努力弄清楚如何在API 23 +上正确设置ACCESS_FINE_LOCATIONCAMERA的Android权限。

我的程序将请求ACCESS_FINE_LOCATION,但它不会在运行时请求 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(); } } } 权限。

我已阅读permissionslocation个开发者页面,但我似乎无法掌握如何正确请求权限。我也查看了stackoverflow的答案,但仍然不明白。

有人能够在我的代码中解释我做错了什么,以及如何解决它?

我的代码:

SELECT table1.Item_Id,Group_Concat(t3.category_name separator ',') as Category_Name
       FROM table1
       INNER JOIN table2
       ON table1.item_id = table2.item_id
       INNER JOIN table3
       ON table2.category=table3.category_id
Group by table1.Item_Id;

1 个答案:

答案 0 :(得分:2)

您并未在您提供的代码中的任何位置请求权限。要询问位置功能,您可以尝试以下示例:

ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_CODE_FINE_GPS);

此外,一旦用户授予使用此功能的权限,您就不会打开相机。

onRequestPermissionsResult()方法中,您应添加else来电openCamera

这样的事情:

@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. 如果获得许可,则获利。在您的应用上调用将使用该功能的方法。
  6. 看看this answer。那家伙创建了一个很好的帮助方法来检查并询问您可能需要的任何数量的权限。然后,您只需要在onRequestPermissionsResult()上处理它们。

    PS:强烈建议您重新阅读the docs如何申请API 23+的权限,您的问题表明您没有&#39 ;了解权限请求的基本概念。另外,请检查Android培训页面的this linkthis related question