Уведомления о сближении не запускаются, начиная с последней версии Android - PullRequest
1 голос
/ 06 января 2020

С 2015 по начало 2019 года следующий код работал хорошо; но начиная с некоторого времени в 2019 году, он перестал работать. Я не могу сказать, когда, потому что я не работал над кодом в течение 2019 года из-за проблем со здоровьем. У меня старый Samsung S5 под управлением Android 6.0. Код работает над этим. У меня Samsung S9 под управлением Android 9.0. Код терпит неудачу на этом. Я не могу запустить Android 7 или 8, поэтому не могу определить, когда он начал давать сбой.

Код выполняет следующие действия: Метод setupProximityAlerts регистрирует ProxReceiver. Затем он выбирает из базы данных желаемые местоположения путевых точек; и вызывает метод addProximityAlert для каждого. Он создает неявное намерение, получает для него Broadcast pendingIntent и отправляет ожидающее Intent в mLocationManager.addProximityAlert. Теперь все путевые точки регистрируются для запуска / запуска широковещательной передачи, когда устройство приближается к любой путевой точке.

    mProxReceiver = new ProxReceiver( );
    IntentFilter sFilter = new IntentFilter( "dkr.ajijic.apps.tm.PROX_ALERT" );
    mContext.registerReceiver( mProxReceiver, sFilter );
    mMediaCursor = tmProviderUtils.getWaypointCursor(trkId, 0, 10000);
    if (mMediaCursor.getCount() <= 1) return false;
    if (mMediaCursor.moveToFirst()) {
    do {
       addProximityAlert(mMediaCursor);
    }
    while (mMediaCursor.moveToNext());
    ...
    private void addProximityAlert( MediaCursor mMediaCursor) {
    getWaypointProperties(mMediaCursor);
    Intent intent = new Intent( "dkr.ajijic.apps.tm.PROX_ALERT" );
    PendingIntent proxPendingIntent = PendingIntent.getBroadcast(
          mContext, wptId, intent, 0);
    ...
    mLocationManager.addProximityAlert( latitude, longitude, proxRadius, -1L, proxPendingIntent );
    }

Следующий код (в службе ForeGround) отправляет каждое GPS-исправление в LocationManager.

       private void onLocationChangeUnFilter(final Location location ) {
   if(location == null) return;
   if(googleLocationListener != null)
   googleLocationListener.onLocationChanged(location);

Я знаю, что это работает, потому что когда я иду, курсор местоположения перемещается по карте. Когда я подхожу к путевой точке, метод ProxReceiver.onReceive должен получать трансляцию. Проблема в том, что LocationManager больше не передает.

В качестве теста я запрограммировал AlarmManager для передачи одного из pendingIntents, и ProcReceiver.onReceive действительно получил трансляцию. Это означает, что проблема не в намерении или pendingIntent. Итак, я вполне уверен, что проблема заключается в LocationManager.

Просто для того, чтобы охватить основы: Вот соответствующий код манифеста.

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    ...
    <receiver android:name=".tour.ProxReceiver" >
    <intent-filter>
    <action android:name="dkr.ajijic.apps.tm.PROX_ALERT" />
    </intent-filter>
    </receiver>

Я прочитал документы по выпуску Google для Android 7, 8 и 9. Я прочитал несколько десятков вопросов / ответов stackOverflow. Я искал последние статьи, примеры, учебники и т. Д. c. Все безрезультатно. Если кто-нибудь может помочь, я, безусловно, был бы благодарен!

...