From cb8c3448f563e9bf28dbdc14fb4bcae60bc2e09f Mon Sep 17 00:00:00 2001 From: LaizyBoy Date: Thu, 7 May 2026 02:23:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(gpsrelaysentinel):=20=E6=B7=BB=E5=8A=A0Swi?= =?UTF-8?q?tch=E6=89=93=E5=BC=80=E6=97=B6=E7=9A=84GPS=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E4=B8=8E=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Switch打开时检查是否有定位权限 - 无权限时自动申请ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION - 权限申请成功后自动启动MainService - 权限申请失败时提示用户并关闭switch - 根据当前权限状态初始化switch显示状态 --- .../studio/gpsrelaysentinel/MainActivity.java | 71 ++++++++++++++++--- 1 file changed, 62 insertions(+), 9 deletions(-) diff --git a/gpsrelaysentinel/src/main/java/cc/winboll/studio/gpsrelaysentinel/MainActivity.java b/gpsrelaysentinel/src/main/java/cc/winboll/studio/gpsrelaysentinel/MainActivity.java index fd9e7cb..97e1530 100644 --- a/gpsrelaysentinel/src/main/java/cc/winboll/studio/gpsrelaysentinel/MainActivity.java +++ b/gpsrelaysentinel/src/main/java/cc/winboll/studio/gpsrelaysentinel/MainActivity.java @@ -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();