С 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. Все безрезультатно. Если кто-нибудь может помочь, я, безусловно, был бы благодарен!