我正在尝试遵循新的Android O指南启动前台服务以进行位置更新。当我调用context.startForegroundService(foregroundIntent)
时,服务类中什么也没有发生,甚至没有调用onCreate()
。但是,该应用程序继续运行,没有任何错误。
这是我的意图:
val foregroundIntent = Intent(context, GeofenceForegroundService::class.java)
我用来创建Intent的上下文是活动上下文,而不是应用程序上下文。
这是Android Manifest中的服务:
<application
...
<service android:name=".services.GeofenceForegroundService"
android:exported="false" />
</application>
这是未启动的服务类中的onCreate,onStartCommand和onBind。
override fun onCreate() {
super.onCreate()
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) //Break point here
locationRequest.interval = UPDATE_INTERVAL_IN_MILLISECONDS
locationRequest.fastestInterval =
FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS
locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
// setup notification channel if Android O or higher
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val DONT_SET_EXPIRE: Long = -123456
val expirationTime = intent?.getLongExtra(REQUEST_EXPIRATION_EXTRA, DONT_SET_EXPIRE)
eventName = intent?.getStringExtra(EVENT_NAME_EXTRA)
if(expirationTime != null && expirationTime != DONT_SET_EXPIRE) {
locationRequest.expirationTime = expirationTime
}
// If the location permission is off stop the service, it isn't doing anyone any good.
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
startForeground(NOTIFICATION_ID, makeNotification())
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null)
} else {
stopSelf()
}
return START_STICKY
}
override fun onBind(p0: Intent?): IBinder? = null
我尝试改为致电context.startService(foregroundService)
,但似乎没有任何变化。
始终在应用程序处于前台时调用此代码,因此后台限制不应该成为问题。
我们将不胜感激您能提供的任何帮助,如果您需要查找其他代码以查找任何问题,请告诉我。这是我第一次使用前台服务,所以如果我犯了一个非常明显的错误,请多多包涵。我试图彻底阅读如何正确地做事,但是有可能我错过了一些应该直接的事情。