我有一个可在后台检测位置的应用。在具有android 9(api 28)或更低版本的设备中,它可以工作,但在android 10中,它会在20秒后停止
有一些代码
我如何称呼服务
Intent intent = new Intent(getApplicationContext(), GoogleService.class);
startService(intent);
主要活动
@Override
protected void onResume() {
super.onResume();
registerReceiver(broadcastReceiver, new IntentFilter(GoogleService.str_receiver));
}
@Override
protected void onPause() {
super.onPause();
registerReceiver(broadcastReceiver, new IntentFilter(GoogleService.str_receiver));
}
@Override
protected void onDestroy() {
super.onDestroy();
registerReceiver(broadcastReceiver, new IntentFilter(GoogleService.str_receiver));
}
Google服务
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mTimer = new Timer();
mTimer.schedule(new TimerTaskToGetLocation(), 5, notify_interval);
intent = new Intent(str_receiver);
}
正如CommonsWare指出的那样,运行这样的后台服务将导致用户在较新版本的Android上离开您的应用后,系统将其杀死。
根据您尝试执行此操作的确切特征,您应该使用WorkManager(如果这是可延迟的,并且不需要每隔15分钟以上),或者使用带有通知的前台服务(如果您需要不断查询)。请参阅this guide from the Android documentation,以获取有关此处选项的更多信息。