新增:自动任务·快捷指令 (开发中)

This commit is contained in:
pppscn 2023-12-18 15:06:05 +08:00
parent bceebbddd4
commit 70d685ee93
6 changed files with 50 additions and 34 deletions

View File

@ -257,7 +257,7 @@ class ServerFragment : BaseFragment<FragmentServerBinding?>(), View.OnClickListe
} }
//重启前台服务,启动/停止定位服务 //重启前台服务,启动/停止定位服务
val serviceIntent = Intent(requireContext(), LocationService::class.java) val serviceIntent = Intent(requireContext(), LocationService::class.java)
serviceIntent.action = "START" serviceIntent.action = "RESTART"
requireContext().startService(serviceIntent) requireContext().startService(serviceIntent)
} }

View File

@ -465,7 +465,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
if (isChecked) { if (isChecked) {
XXPermissions.with(this).permission(Permission.ACCESS_COARSE_LOCATION).permission(Permission.ACCESS_FINE_LOCATION).permission(Permission.ACCESS_BACKGROUND_LOCATION).request(object : OnPermissionCallback { 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<String>, all: Boolean) { override fun onGranted(permissions: List<String>, all: Boolean) {
restartLocationService() restartLocationService("START")
} }
override fun onDenied(permissions: List<String>, never: Boolean) { override fun onDenied(permissions: List<String>, never: Boolean) {
@ -478,11 +478,11 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
} }
SettingUtils.enableLocation = false SettingUtils.enableLocation = false
switchEnableLocation.isChecked = false switchEnableLocation.isChecked = false
restartLocationService() restartLocationService("STOP")
} }
}) })
} else { } else {
restartLocationService() restartLocationService("STOP")
} }
layoutLocationSetting.visibility = if (isChecked) View.VISIBLE else View.GONE layoutLocationSetting.visibility = if (isChecked) View.VISIBLE else View.GONE
} }
@ -502,7 +502,8 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
R.id.rb_accuracy_no_requirement -> Criteria.NO_REQUIREMENT R.id.rb_accuracy_no_requirement -> Criteria.NO_REQUIREMENT
else -> Criteria.ACCURACY_FINE else -> Criteria.ACCURACY_FINE
} }
restartLocationService() //TODO: MainActivity.kt 中压入 FragmentManager 时会导致定位服务重启,暂时注释掉
//restartLocationService()
} }
//设置电量消耗:低电耗(默认) //设置电量消耗:低电耗(默认)
rgPowerRequirement.check( rgPowerRequirement.check(
@ -522,26 +523,30 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
R.id.rb_power_requirement_no_requirement -> Criteria.NO_REQUIREMENT R.id.rb_power_requirement_no_requirement -> Criteria.NO_REQUIREMENT
else -> Criteria.POWER_LOW else -> Criteria.POWER_LOW
} }
restartLocationService() //TODO: MainActivity.kt 中压入 FragmentManager 时会导致定位服务重启,暂时注释掉
//restartLocationService()
} }
//设置位置更新最小时间间隔(单位:毫秒); 默认间隔10000毫秒最小间隔1000毫秒 //设置位置更新最小时间间隔(单位:毫秒); 默认间隔10000毫秒最小间隔1000毫秒
xsbMinInterval.setDefaultValue((SettingUtils.locationMinInterval / 1000).toInt()) xsbMinInterval.setDefaultValue((SettingUtils.locationMinInterval / 1000).toInt())
xsbMinInterval.setOnSeekBarListener { _: XSeekBar?, newValue: Int -> xsbMinInterval.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
SettingUtils.locationMinInterval = newValue * 1000L SettingUtils.locationMinInterval = newValue * 1000L
restartLocationService() //TODO: MainActivity.kt 中压入 FragmentManager 时会导致定位服务重启,暂时注释掉
//restartLocationService()
} }
//设置位置更新最小距离单位默认距离0米 //设置位置更新最小距离单位默认距离0米
xsbMinDistance.setDefaultValue(SettingUtils.locationMinDistance) xsbMinDistance.setDefaultValue(SettingUtils.locationMinDistance)
xsbMinDistance.setOnSeekBarListener { _: XSeekBar?, newValue: Int -> xsbMinDistance.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
SettingUtils.locationMinDistance = newValue 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) val serviceIntent = Intent(requireContext(), LocationService::class.java)
serviceIntent.action = "START" serviceIntent.action = action
requireContext().startService(serviceIntent) requireContext().startService(serviceIntent)
} }

View File

@ -49,20 +49,22 @@ class LocationService : Service(), Server.ServerListener {
} }
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.i(TAG, "onStartCommand: ") super.onStartCommand(intent, flags, startId)
if (intent != null) {
when (intent.action) { if (!SettingUtils.enableLocation || intent == null) return START_NOT_STICKY
"START" -> {
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() startService()
} }
"STOP" -> { return START_NOT_STICKY
stopService()
}
}
}
return super.onStartCommand(intent, flags, startId)
} }
override fun onDestroy() { override fun onDestroy() {

View File

@ -86,21 +86,23 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
//TODO取不到卡槽信息时采用默认卡槽发送 //TODO取不到卡槽信息时采用默认卡槽发送
val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1 val mSubscriptionId: Int = App.SimInfoList[simSlotIndex]?.mSubscriptionId ?: -1
val msg = if (ActivityCompat.checkSelfPermission(App.context, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.checkSelfPermission(App.context, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
ResUtils.getString(R.string.no_sms_sending_permission) val msg = ResUtils.getString(R.string.no_sms_sending_permission)
writeLog(msg, "ERROR")
} else { } else {
PhoneUtils.sendSms(mSubscriptionId, smsSetting.phoneNumbers, smsSetting.msgContent) val msg = PhoneUtils.sendSms(mSubscriptionId, smsSetting.phoneNumbers, smsSetting.msgContent)
successNum++ successNum++
writeLog("send sms result: $msg", "SUCCESS")
} }
writeLog("send sms result: $msg")
} }
TASK_ACTION_NOTIFICATION -> { TASK_ACTION_NOTIFICATION -> {
val settingVo = Gson().fromJson(action.setting, Rule::class.java) val settingVo = Gson().fromJson(action.setting, Rule::class.java)
//自动任务的不需要吐司或者更新日志,特殊处理 logId = -1msgId = -1 //自动任务的不需要吐司或者更新日志,特殊处理 logId = -1msgId = -1
SendUtils.sendMsgSender(msgInfo, settingVo, 0, -1L, -1L) SendUtils.sendMsgSender(msgInfo, settingVo, 0, -1L, -1L)
successNum++ successNum++
writeLog("send notification success", "SUCCESS")
} }
TASK_ACTION_FRPC -> { TASK_ACTION_FRPC -> {
@ -140,6 +142,9 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
} }
} }
} }
successNum++
writeLog("frpc success", "SUCCESS")
} }
TASK_ACTION_HTTPSERVER -> { TASK_ACTION_HTTPSERVER -> {
@ -155,6 +160,9 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
App.context.stopService(it) App.context.stopService(it)
} }
} }
successNum++
writeLog("httpServer success", "SUCCESS")
} }
else -> { else -> {

View File

@ -345,14 +345,11 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
style="@style/settingBarStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="5dp" android:gravity="center_vertical"
android:background="@color/setting_bar_color" android:orientation="vertical">
android:orientation="vertical"
android:paddingStart="10dp"
android:paddingTop="10dp"
tools:ignore="RtlSymmetry">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -398,6 +395,11 @@
android:orientation="vertical" android:orientation="vertical"
android:visibility="gone"> android:visibility="gone">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/xui_config_color_separator_light" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -486,7 +488,6 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/config_margin_10dp"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">

View File

@ -1089,7 +1089,7 @@
<string name="enable_location">启用GPS定位功能</string> <string name="enable_location">启用GPS定位功能</string>
<string name="enable_location_dialog">必须开启定位服务,才能使用获取!\n是否立即启用</string> <string name="enable_location_dialog">必须开启定位服务,才能使用获取!\n是否立即启用</string>
<string name="enable_location_tips">用于支持 查找手机、{{定位信息}}标签 功能</string> <string name="enable_location_tips">用于支持 查找手机、{{定位信息}}标签 功能;设置项改变后需开关以生效</string>
<string name="accuracy">位置精度</string> <string name="accuracy">位置精度</string>
<string name="accuracy_fine">精确位置</string> <string name="accuracy_fine">精确位置</string>
<string name="accuracy_coarse">模糊位置</string> <string name="accuracy_coarse">模糊位置</string>