Я думаю, вы хотите запустить сервис из фона, верно?Я использовал этот метод для выполнения моих требований к отслеживанию.
Вы можете использовать BroadcastReceiver вместе с Сервисом .Использование return Service.START_STICKY
на onStartCommand вservice.
В onDestroy или в onTaskRemoved вы можете записать отправку и начать прием трансляции, как показано ниже [in kotlin].
override fun onTaskRemoved(rootIntent: Intent?) {
super.onTaskRemoved(rootIntent)
Log.e("Api service on Task Removed Send Location Service")
if (Global.getPreference(Constant.IS_USER_LOGIN, false)!!) {
val broadcastIntent = Intent("com.myapp.project.restartSendLocationService")
sendBroadcast(broadcastIntent)
}
}
И вПолучатель, вы можете начать свою службу снова, как показано ниже [в котлине].
class SendLocationReceiver : BroadcastReceiver() {
override fun onReceive(_context: Context?, intent: Intent?) {
if (_context != null) {
val context = _context.applicationContext
val intentDemo = Intent(_context.applicationContext, SendLocationService::class.java)
Log.e("Smart Sales", "UpdateLocationService \$status")
try {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
context.startService(intentDemo)
} else {
context.startForegroundService(intentDemo)
}
} catch (e: Exception) {
Log.e("Smart Sales", e.toString())
}
}
}
}
Не забудьте добавить в манифест.
<receiver
android:name=".ServiceStuff.kotlin.SendLocationReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.myapp.project.restartSendLocationService" />
</intent-filter>
</receiver>
Примечание:В некоторых пользовательских ОС служба не работает в фоновом режиме.