feat(gpsrelaysentinel): 添加Switch打开时的GPS权限检查与申请

- Switch打开时检查是否有定位权限
- 无权限时自动申请ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION
- 权限申请成功后自动启动MainService
- 权限申请失败时提示用户并关闭switch
- 根据当前权限状态初始化switch显示状态
This commit is contained in:
2026-05-07 02:23:14 +08:00
parent 0e90f40f0f
commit cb8c3448f5

View File

@@ -1,41 +1,52 @@
package cc.winboll.studio.gpsrelaysentinel;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.Switch;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.LogView;
import cc.winboll.studio.libappbase.ToastUtils;
public class MainActivity extends AppCompatActivity {
LogView mLogView;
Switch mSwitchService;
LogView mLogView;
Switch mSwitchService;
private static final int REQUEST_LOCATION_PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mLogView = findViewById(R.id.logview);
mSwitchService = findViewById(R.id.switch_service);
// 根据当前权限状态初始化switch
mSwitchService.setChecked(hasLocationPermission());
mSwitchService.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Intent intent = new Intent(MainActivity.this, MainService.class);
if (isChecked) {
startForegroundService(intent);
ToastUtils.show("GPS Service started");
// 打开时检查权限
if (hasLocationPermission()) {
startService();
} else {
// 没有权限,申请权限
requestLocationPermission();
// 暂时不打开switch等权限申请结果
mSwitchService.setChecked(false);
}
} else {
stopService(intent);
ToastUtils.show("GPS Service stopped");
stopService();
}
}
});
@@ -43,6 +54,48 @@ public class MainActivity extends AppCompatActivity {
ToastUtils.show("onCreate");
}
private boolean hasLocationPermission() {
return checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
private void requestLocationPermission() {
String[] permissions = new String[] {
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION
};
requestPermissions(permissions, REQUEST_LOCATION_PERMISSION);
}
private void startService() {
Intent intent = new Intent(MainActivity.this, MainService.class);
startForegroundService(intent);
ToastUtils.show("GPS Service started");
LogUtils.d(MainService.TAG, "GPS Service started from MainActivity");
}
private void stopService() {
Intent intent = new Intent(MainActivity.this, MainService.class);
stopService(intent);
ToastUtils.show("GPS Service stopped");
LogUtils.d(MainService.TAG, "GPS Service stopped from MainActivity");
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_LOCATION_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限申请成功,启动服务
mSwitchService.setChecked(true);
startService();
} else {
ToastUtils.show("需要位置权限才能使用GPS服务");
mSwitchService.setChecked(false);
}
}
}
@Override
protected void onResume() {
super.onResume();