feat(gpsrelaysentinel): 升级为始终允许GPS监听权限申请

- 添加ACCESS_BACKGROUND_LOCATION权限声明
- 在Android Q及以上版本申请后台位置权限
- 权限检查包含后台位置权限验证
- 权限申请时根据系统版本动态添加后台位置权限
This commit is contained in:
2026-05-07 02:26:55 +08:00
parent cb8c3448f5
commit dae269ff77
2 changed files with 20 additions and 6 deletions

View File

@@ -5,6 +5,7 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application

View File

@@ -55,16 +55,29 @@ public class MainActivity extends AppCompatActivity {
}
private boolean hasLocationPermission() {
return checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
boolean hasBasic = checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
if (hasBasic && android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
return checkSelfPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
return hasBasic;
}
private void requestLocationPermission() {
String[] permissions = new String[] {
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION
};
requestPermissions(permissions, REQUEST_LOCATION_PERMISSION);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
String[] permissions = new String[] {
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_BACKGROUND_LOCATION
};
requestPermissions(permissions, REQUEST_LOCATION_PERMISSION);
} else {
String[] permissions = new String[] {
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION
};
requestPermissions(permissions, REQUEST_LOCATION_PERMISSION);
}
}
private void startService() {