GenerateForegroundServiceDIDnotStartIntimeException Service AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 GenerateForegroundServiceDIDnotStartIntimeException Service Android

Сообщение Anonymous »

Я строю приложение для Android в Котлин. Это приложение запускает некоторую службу, в которой начинается приложение.Context.startForegroundService() did not then call Service.startForeground():
ServiceRecord{e92fa72 u0 it.silv\/.service.O2RingServiceReceiver}
android.app.ActivityThread.generateForegroundServiceDidNotStartInTimeException(ActivityThread.java:1966)
android.app.ActivityThread.throwRemoteServiceException(ActivityThread.java:1937)
android.app.ActivityThread.access$2700(ActivityThread.java:257)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2191)
android.os.Handler.dispatchMessage(Handler.java:106)\n\tat android.os.Looper.loopOnce(Looper.java:201)
android.os.Looper.loop(Looper.java:288)\n\tat android.app.ActivityThread.main(ActivityThread.java:7911)
java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1009)
Caused by: android.app.StackTrace: Last startServiceCommon() call for this service was made here
android.app.ContextImpl.startServiceCommon(ContextImpl.java:1877)
android.app.ContextImpl.startForegroundService(ContextImpl.java:1832)
android.content.ContextWrapper.startForegroundService(ContextWrapper.java:781)
android.content.ContextWrapper.startForegroundService(ContextWrapper.java:781)
it.silv.HeaderFragment.checkPulseConfiguration(HeaderFragment.kt:618)
it.silv.HeaderFragment.onCreateView(HeaderFragment.kt:122)
androidx.fragment.app.Fragment.performCreateView(Fragment.java:3119)
androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:577)
androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:286)
androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:114)
androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1685)
androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3319)
androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3237)
androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:263)
androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:350)
androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:251)
it.silv.HomeActivity.onStart(HomeActivity.java:685)
android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1468)
android.app.Activity.performStart(Activity.java:8110)
android.app.ActivityThread.handleStartActivity(ActivityThread.java:3733)
android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
< /code>
Это код, который я использую для запуска службы: < /p>
val sensorService: Intent = Intent(context, O2RingServiceReceiver::class.java)
sensorService.putExtra("device", "MACADDRESS OF DEVICE")
sensorService.putExtra("deviceName", "DEVICE NAME")
sensorService.putExtra(Const.id_user, 200)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
context?.startService(sensorService)
break;
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
context?.startForegroundService(sensorService)
break;
} else {
context?.startForegroundService(sensorService)
break;
}
< /code>
Это класс o2ringservicereceiver: < /p>
package it.silv.service

import android.app.ActivityManager
import android.content.Intent
import android.os.Handler
import com.lepu.blepro.ext.oxy.RtParam
import it.silv.helpers.Global
import it.silv.helpers.utils.ACTION_PULSE_PACKET_RECEIVED
import it.silv.job.O2RingPacketSyncJob
import it_sensor.iotRequest.O2RingDataRequest
import it_sensor.service.O2RingServicekt
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

class O2RingServiceReceiver: O2RingServicekt() {

var isStarted: Boolean = false
var fmt: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
var list: ArrayList = ArrayList()
private var dataRequest = O2RingDataRequest()
override fun onCreate() {
super.onCreate()
isStarted=true;

syncGeneralPacket()
}

override fun receivedData(data: RtParam){
//TODO
}

private fun syncGeneralPacket() {
//TODO
}

public fun getIsStarted():Boolean{
return this.isStarted;
}

}
< /code>
Это o2ringservicekt < /p>
package it.sensor.service

import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.content.Intent
import android.os.Handler
import android.util.Log
import android.util.SparseArray
import androidx.lifecycle.LifecycleService
import com.jeremyliao.liveeventbus.LiveEventBus
import com.lepu.blepro.event.InterfaceEvent
import com.lepu.blepro.ext.BleServiceHelper
import com.lepu.blepro.ext.oxy.DeviceInfo
import com.lepu.blepro.ext.oxy.OxyFile
import com.lepu.blepro.ext.oxy.RtParam
import com.lepu.blepro.ext.oxy.RtPpg
import com.lepu.blepro.objs.Bluetooth
import com.lepu.blepro.objs.BluetoothController
import com.lepu.blepro.observer.BIOL
import com.lepu.blepro.observer.BleChangeObserver
import it.sensor.util.Const

open class O2RingServicekt: LifecycleService(), BleChangeObserver {
private var rtHandler = Handler()
private var rtTask = RtTask()
private var model = Bluetooth.MODEL_O2RING
val TAG: String = "O2RING "
var idUser: Int = 0
lateinit var macAddress: String
lateinit var deviceName: String
private val models = intArrayOf(
Bluetooth.MODEL_O2RING
)

override fun onCreate() {
super.onCreate()
initService()
log("BackgroundTaskService is ready to conquer!")
}

override open fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
super.onStartCommand(intent, flags, startId)
idUser = intent!!.getStringExtra(Const.id_user)!!.toInt()
macAddress = intent!!.getStringExtra("device")!!.toString()
deviceName = intent!!.getStringExtra("deviceName")!!.toString()
log("BackgroundTaskService is performing a task! Don't disturb, please!")
BleServiceHelper.BleServiceHelper.setInterfaces(4)

val device: BluetoothDevice =
BluetoothAdapter.getDefaultAdapter().getRemoteDevice(macAddress)
BleServiceHelper.BleServiceHelper.stopScan()
BleServiceHelper.BleServiceHelper.connect(applicationContext, 4, device)
BluetoothController.clear()
lifecycle.addObserver(BIOL(this, intArrayOf(4)))
initEventBus()
rtHandler.removeCallbacks(rtTask)
rtHandler.post(rtTask)
return START_STICKY // If the service is killed, it will be automatically restarted
}

inner class RtTask: Runnable {
override fun run() {
rtHandler.postDelayed(rtTask, 1000)
BleServiceHelper.BleServiceHelper.oxyGetRtParam(model)
rtHandler.removeCallbacks(rtTask)
rtHandler.post(rtTask)
}
}

override fun onDestroy() {
super.onDestroy()
log("BackgroundTaskService says goodbye!")
}

fun log(str:String){
//Log.d("TAG", "log: $str")
}

private fun initService() {
if (BleServiceHelper.BleServiceHelper.checkService()) {
BleServiceHelper.BleServiceHelper.startScan(models)
} else {
val rawFolders = SparseArray()
BleServiceHelper.BleServiceHelper.initRawFolder(rawFolders).initService(application).initLog(true)
}
}

private fun initEventBus() {
LiveEventBus.get(InterfaceEvent.Oxy.EventOxyInfo)
.observe(this) {
val data = it.data as DeviceInfo
val list = data.fileList.split(",")
}
LiveEventBus.get(InterfaceEvent.Oxy.EventOxyReadFileError)
.observe(this) {
val data = it.data as Boolean
Log.d(TAG, "EventOxyReadFileError $data")
}
LiveEventBus.get(InterfaceEvent.Oxy.EventOxyReadingFileProgress)
.observe(this) {
val data = it.data as Int
Log.d(TAG, "进度 $data%")
}
LiveEventBus.get(InterfaceEvent.Oxy.EventOxyReadFileComplete)
.observe(this) {
val data = it.data as OxyFile
Log.d(TAG, "$data")
}
LiveEventBus.get(InterfaceEvent.Oxy.EventOxyRtParamData)
.observe(this) {
val data = it.data as RtParam
Log.d(TAG, data.spo2.toString() + " " + data.pr.toString()+ " " + data.pi.toString()+ " "+"$data")
receivedData(data)
}
LiveEventBus.get(InterfaceEvent.Oxy.EventOxyFactoryReset)
.observe(this) {
val data = it.data as Boolean
Log.d(TAG, "EventOxyFactoryReset $data")
}
LiveEventBus.get(InterfaceEvent.Oxy.EventOxySyncDeviceInfo)
.observe(this) {
val types = it.data as Array
for (type in types) {
Log.d(TAG, "$type success")
}
}
LiveEventBus.get(InterfaceEvent.Oxy.EventOxyPpgData)
.observe(this) {
// BleServiceHelper.BleServiceHelper.oxyGetPpgRt(model)
val data = it.data as RtPpg
Log.d(TAG, "EventOxyFactoryReset $data")
}
}

override fun onBleStateChanged(model: Int, state: Int) {
Log.d(TAG, "model $model, state: $state")
}

open fun receivedData(data: RtParam){}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... ce-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»