我一直在开发一个应用程序,在该应用程序中,我们必须每分钟都必须跟踪用户位置,因此我们将保持服务器启用实时跟踪模式。
我已经使用Foreground服务实现了相同的功能,并且可以在大多数设备上正常工作,但对于OPPO和VIVO这样的设备(该服务会在一段时间后停止运行)进行正常工作。不管我多么努力尝试使用广播接收器或每15分钟使用警报管理器重新启动一次服务,如果服务未运行则启动服务。.但是该服务一直处于停止状态,并且从未重新启动。以下是它的代码,
public class HomeLocationService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(NOTIFICATION_ID, getNotification());
// Method to location request and sending it to server.
return START_STICKY;
}
@Override
public void onDestroy() {
Intent intent = new Intent("com.android.restartservice");
sendBroadcast(intent);
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Intent intent = new Intent(getApplicationContext(), HomeLocationService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
if (alarmManager != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 5000, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 5000, pendingIntent);
}
}
super.onTaskRemoved(rootIntent);
}
}
我想知道,除了服务和作业计划程序(它们只能在15分钟的间隔内运行)之外,是否还有其他方法可以更新服务器的位置?请给我您的宝贵建议。预先感谢。