У меня есть приложение Android с сервисом переднего плана, который прослушивает обновления местоположения GPS, я использую LocationManager только с провайдером GPS.
У меня есть этот кусок кода:
Intent intent = new Intent(this, LocationUpdateReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
this.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, this.INTERVAL, 0.0f, pi);
Я получаю обновления местоположения через приемник.Он работает правильно, когда экран включен, но когда я выключаю экран устройства, он перестает получать обновления местоположения.Он работает на моем устройстве Redmi 5 и работает, как ожидалось.но моя проблема возникает на huawei.
Примечание: this.INTERVAL = 10000;Я использую wakeLock для предотвращения сна устройства следующим образом:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG:");
wakeLock.aquire();
Также мой сервис в Manifist.xml выглядит так:
<service android:name="com.arttech.services.LocationService" android:enabled="true" />
И, наконец, я показываю уведомление длямой приоритетный сервис выглядит следующим образом:
Notification.Builder ongoing = new Notification.Builder(getBaseContext()).setSmallIcon(R.drawable.logo).setContentTitle("Location Service").setOngoing(true);
if (Build.VERSION.SDK_INT >= 26) {
ongoing.setChannelId("myChannelID");
}
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATIONID, ongoing.build());
Кто-нибудь может мне помочь с этой проблемой?Я бьюсь больше месяца и никуда не денусь.
Спасибо
Обновление:
Я также пытался вручную добавить свое приложение как защищенное через батареюнастройки, но я получаю такое же поведение.Я протестировал какое-то приложение под названием пережить, и оно отлично записывает местоположения GPS.Что я делаю не так?
ОБНОВЛЕНИЕ: Вот мой код OnStartCommand:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("omar","Service Started");
LocationObserver.getInstance().addObserver(this);
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT > 8)
{
Log.d("omar_build",SDK_INT+"");
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
CreateConnectionInstance(); // Connect to socket
startTracking();
isLocationServiceRunning = true;
return START_STICKY;
}