android - 在 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"
解决方案
推荐阅读
- r - 当存在多个几何时,删除一个几何的轴标签
- javascript - 是否有可能获得价值
从使用 axios 发回 json 响应的端点? - angular6 - 在 Angular 6 中导入 YouTube iframe API 的简单方法?
- linux - 从文本文件中删除注释行
- javascript - 如何使用正则表达式为特定文本着色
- hadoop - 如何加快蜂巢中的排序
- angular - Angular 6 只信任 innerHtml 中的 iframe
- python - Python排序以避免“KeyError:'href'”
- javascript - 为 React 组件分配 ID
- angular - 任何类似于谷歌页面翻译器的 npm 包?