diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/ServerFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/ServerFragment.kt index 94b18db3..83ff0a6a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/ServerFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/ServerFragment.kt @@ -257,7 +257,7 @@ class ServerFragment : BaseFragment(), View.OnClickListe } //重启前台服务,启动/停止定位服务 val serviceIntent = Intent(requireContext(), LocationService::class.java) - serviceIntent.action = "START" + serviceIntent.action = "RESTART" requireContext().startService(serviceIntent) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt index d494eaa9..ad46597b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt @@ -465,7 +465,7 @@ class SettingsFragment : BaseFragment(), View.OnClickL if (isChecked) { XXPermissions.with(this).permission(Permission.ACCESS_COARSE_LOCATION).permission(Permission.ACCESS_FINE_LOCATION).permission(Permission.ACCESS_BACKGROUND_LOCATION).request(object : OnPermissionCallback { override fun onGranted(permissions: List, all: Boolean) { - restartLocationService() + restartLocationService("START") } override fun onDenied(permissions: List, never: Boolean) { @@ -478,11 +478,11 @@ class SettingsFragment : BaseFragment(), View.OnClickL } SettingUtils.enableLocation = false switchEnableLocation.isChecked = false - restartLocationService() + restartLocationService("STOP") } }) } else { - restartLocationService() + restartLocationService("STOP") } layoutLocationSetting.visibility = if (isChecked) View.VISIBLE else View.GONE } @@ -502,7 +502,8 @@ class SettingsFragment : BaseFragment(), View.OnClickL R.id.rb_accuracy_no_requirement -> Criteria.NO_REQUIREMENT else -> Criteria.ACCURACY_FINE } - restartLocationService() + //TODO: MainActivity.kt 中压入 FragmentManager 时会导致定位服务重启,暂时注释掉 + //restartLocationService() } //设置电量消耗:低电耗(默认) rgPowerRequirement.check( @@ -522,26 +523,30 @@ class SettingsFragment : BaseFragment(), View.OnClickL R.id.rb_power_requirement_no_requirement -> Criteria.NO_REQUIREMENT else -> Criteria.POWER_LOW } - restartLocationService() + //TODO: MainActivity.kt 中压入 FragmentManager 时会导致定位服务重启,暂时注释掉 + //restartLocationService() } //设置位置更新最小时间间隔(单位:毫秒); 默认间隔:10000毫秒,最小间隔:1000毫秒 xsbMinInterval.setDefaultValue((SettingUtils.locationMinInterval / 1000).toInt()) xsbMinInterval.setOnSeekBarListener { _: XSeekBar?, newValue: Int -> SettingUtils.locationMinInterval = newValue * 1000L - restartLocationService() + //TODO: MainActivity.kt 中压入 FragmentManager 时会导致定位服务重启,暂时注释掉 + //restartLocationService() } //设置位置更新最小距离(单位:米);默认距离:0米 xsbMinDistance.setDefaultValue(SettingUtils.locationMinDistance) xsbMinDistance.setOnSeekBarListener { _: XSeekBar?, newValue: Int -> SettingUtils.locationMinDistance = newValue - restartLocationService() + //TODO: MainActivity.kt 中压入 FragmentManager 时会导致定位服务重启,暂时注释掉 + //restartLocationService() } } //重启定位服务 - private fun restartLocationService() { + private fun restartLocationService(action: String = "RESTART") { + Log.d(TAG, "restartLocationService, action: $action") val serviceIntent = Intent(requireContext(), LocationService::class.java) - serviceIntent.action = "START" + serviceIntent.action = action requireContext().startService(serviceIntent) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/LocationService.kt b/app/src/main/java/com/idormy/sms/forwarder/service/LocationService.kt index 7a9b7e64..236d61e9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/LocationService.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/service/LocationService.kt @@ -49,20 +49,22 @@ class LocationService : Service(), Server.ServerListener { } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - Log.i(TAG, "onStartCommand: ") - if (intent != null) { - when (intent.action) { - "START" -> { - startService() - } + super.onStartCommand(intent, flags, startId) - "STOP" -> { - stopService() - } - } + if (!SettingUtils.enableLocation || intent == null) return START_NOT_STICKY + + Log.i(TAG, "onStartCommand: ${intent.action}") + + if (intent.action == "START" && !isRunning) { + startService() + } else if (intent.action == "STOP" && isRunning) { + stopService() + } else if (intent.action == "RESTART") { + stopService() + startService() } - return super.onStartCommand(intent, flags, startId) + return START_NOT_STICKY } override fun onDestroy() { diff --git a/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt b/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt index 1efa6583..8fa8119d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt @@ -86,21 +86,23 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker //TODO:取不到卡槽信息时,采用默认卡槽发送 val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1 - val msg = if (ActivityCompat.checkSelfPermission(App.context, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { - ResUtils.getString(R.string.no_sms_sending_permission) + if (ActivityCompat.checkSelfPermission(App.context, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { + val msg = ResUtils.getString(R.string.no_sms_sending_permission) + writeLog(msg, "ERROR") } else { - PhoneUtils.sendSms(mSubscriptionId, smsSetting.phoneNumbers, smsSetting.msgContent) + val msg = PhoneUtils.sendSms(mSubscriptionId, smsSetting.phoneNumbers, smsSetting.msgContent) successNum++ + writeLog("send sms result: $msg", "SUCCESS") } - - writeLog("send sms result: $msg") } TASK_ACTION_NOTIFICATION -> { val settingVo = Gson().fromJson(action.setting, Rule::class.java) //自动任务的不需要吐司或者更新日志,特殊处理 logId = -1,msgId = -1 SendUtils.sendMsgSender(msgInfo, settingVo, 0, -1L, -1L) + successNum++ + writeLog("send notification success", "SUCCESS") } TASK_ACTION_FRPC -> { @@ -140,6 +142,9 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker } } } + + successNum++ + writeLog("frpc success", "SUCCESS") } TASK_ACTION_HTTPSERVER -> { @@ -155,6 +160,9 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker App.context.stopService(it) } } + + successNum++ + writeLog("httpServer success", "SUCCESS") } else -> { diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 638a99f4..264705d0 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -345,14 +345,11 @@ + android:gravity="center_vertical" + android:orientation="vertical"> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 28b8f6b5..635d8fe6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1089,7 +1089,7 @@ 启用GPS定位功能 必须开启定位服务,才能使用获取!\n是否立即启用? - 用于支持 查找手机、{{定位信息}}标签 功能 + 用于支持 查找手机、{{定位信息}}标签 功能;设置项改变后需开关以生效 位置精度 精确位置 模糊位置