Обновление GPS-местоположения перестает обновляться, если положить приложение в фоновом режиме и отключить экран на huawei mya-L22

1

У меня есть приложение для 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;
}
Теги:
location
service
huawei

2 ответа

0

Может быть, это поможет вам, от commonsware

https://commonsware.com/blog/2015/11/18/another-doze-edge-case-foreground.html

Предполагается, что сервис переднего плана с частичным WakeLock блокирует режим Doze, предположительно, с прицелом на музыкальные проигрыватели и тому подобное. Однако г-н Налевка обнаружил, что если процесс с сервисом переднего плана также имеет активность на переднем плане, режим Doze снова вступает во владение.

Дайан Хэкборн рекомендует обходной путь - разделить обслуживание переднего плана на отдельный процесс. Поскольку, похоже, нет способа связать определенные комментарии G+, вам нужно прокрутить список комментариев в этом сообщении, чтобы перейти к их обмену.

0

Вероятно, это связано с ограничениями, применяемыми заказными брендами, такими как Huawei и некоторыми другими. Вы должны добавить свое приложение в белый список телефона. Пожалуйста, проверьте следующую ссылку Как приложение WhiteList в режиме Doze Android 6.0

ОБНОВЛЕНИЕ: внесите эти два изменения и затем проверьте

  1. Получить WakeLock в OnStartCommand
  2. Получить Wakelock с приблизительным временем
  3. Отпустите ваш Wakelock, когда сервис уничтожен или когда сервисные работы завершены

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

        if (powerManager != null)
            mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_TAG);

        if (mWakeLock != null)
            mWakeLock.acquire(TimeUnit.HOURS.toMillis(10));
  • 0
    Спасибо за ваше воспроизведение, я попытался добавить свое приложение в защищенное приложение вручную, но ничего не изменилось, я установил на этом устройстве приложение, называемое relive, и оно работает отлично, я запускаю два приложения и тестирую оба пути gps, другое приложение совершенно идеально.
  • 0
    Пожалуйста, предоставьте ваш код onStartCommand здесь. так что я могу посмотреть, какой именно код вы используете
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню