首页 > 解决方案 > 在 Android 10 及更高版本上无法访问后台位置

问题描述

我正在开发 MinSdkVersion 为 23 和 TargetSdkVersion 为 30 的应用程序,这需要后台位置来跟踪用户。低于 10 可以正常工作,但是当它针对 10 和 11 后台位置无法访问时,我必须手动转到应用程序信息,然后我必须从那里允许位置权限。下面是我获取权限的代码。

  private void getPermission() {

if (ActivityCompat.checkSelfPermission(LoginActivity.this,
        Manifest.permission.READ_EXTERNAL_STORAGE) +
        ActivityCompat.checkSelfPermission(LoginActivity.this,
                Manifest.permission.CAMERA) +
        ActivityCompat.checkSelfPermission(LoginActivity.this,
                Manifest.permission.ACCESS_COARSE_LOCATION) +
        ActivityCompat.checkSelfPermission(LoginActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) + ActivityCompat
        .checkSelfPermission(LoginActivity.this,
                Manifest.permission.ACCESS_BACKGROUND_LOCATION)

        + ActivityCompat


        .checkSelfPermission(LoginActivity.this,
                Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)

{

    if (ActivityCompat.shouldShowRequestPermissionRationale
            (LoginActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) ||
            ActivityCompat.shouldShowRequestPermissionRationale
                    (LoginActivity.this, Manifest.permission.CAMERA) ||
            ActivityCompat.shouldShowRequestPermissionRationale
                    (LoginActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) ||


            ActivityCompat.shouldShowRequestPermissionRationale
                    (LoginActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) ||


            ActivityCompat.shouldShowRequestPermissionRationale
                    (LoginActivity.this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) ||


            ActivityCompat.shouldShowRequestPermissionRationale
                    (LoginActivity.this, Manifest.permission.READ_PHONE_STATE)) {

        Snackbar.make(LoginActivity.this.findViewById(android.R.id.content),
                "Please Grant Permissions to start using application",
                Snackbar.LENGTH_INDEFINITE).setAction("ENABLE",
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            requestPermissions(
                                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                                            Manifest.permission.CAMERA,
                                            Manifest.permission.ACCESS_COARSE_LOCATION,
                                            Manifest.permission.ACCESS_FINE_LOCATION,
                                            Manifest.permission.ACCESS_BACKGROUND_LOCATION,
                                            Manifest.permission.READ_PHONE_STATE},
                                    PERMISSIONS_MULTIPLE_REQUEST);
                        }
                    }
                }).show();
    } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                            Manifest.permission.CAMERA,
                            Manifest.permission.ACCESS_COARSE_LOCATION,
                            Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.ACCESS_BACKGROUND_LOCATION,
                            Manifest.permission.READ_PHONE_STATE},
                    PERMISSIONS_MULTIPLE_REQUEST);
        }
    }
}

在 Manifiest 文件中,我在下面提到了权限

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"

从下图中您可以看到,在低于 10 的版本中,它显示了批准权限的权限对话框,而在上面它不显示批准的权限对话框 出现以下 10 版本权限对话框

10以上版本权限对话框不出现

标签: androidlocationandroid-permissionsuser-permissionsandroid-10.0

解决方案


推荐阅读