LocationManager.addProximityAlert (…) выдает исключение IllegalArgumentException («ожидающее намерение должно быть нацелено на пакет»)

#android

#Android

Вопрос:

Я пытаюсь настроить геозону с помощью LocationManager.addProximityAlert(...) , но получаю IllegalArgumentException("pending intent must be targeted to package") .

Вот мой код:

 Intent intent = new Intent(context, MyIntentService.class);
intent.setPackage(context.getPackageName());
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

locationManager.addProximityAlert(latitude, longitude, radius, expiration, pendingIntent);
  

Первое, что делает LocationManager, это вызов, checkPendingIntent(intent) который вызывает intent.isTargetedToPackage() , который вызывает ActivityManagerNative.isIntentSenderTargetedToPackage(IIntentSender sender) https://android.googlesource.com/platform/frameworks/base/ /c80f952/core/java/android/app/ActivityManagerNative.java#4609

Результатом является, false и я получаю IllegalArgumentException("pending intent must be targeted to package") .

То же самое отлично работает, если я использую BroadcastReceiver вместо IntentService .

Как мне это исправить IllegalArgumentException ?

PS Я использую LocationManager для устройств, на которых не установлены службы воспроизведения. Используется IntentService для немедленного выполнения некоторых запросов API, что может занять некоторое время. IntentService зарегистрировано в манифесте как <service android:name=".MyIntentService" android:exported="false"/> .

Обновление: вот код, который работает с BroadcastReceiver. AndroidManifest:

 <receiver android:name=".MyBroadcastReceiver" android:exported="false">
    <intent-filter>
        <action android:name="MyBroadcastReceiver.GEOFENCE_TRANSITION"/>
    </intent-filter>
</receiver>
  

java-код:

 Intent intent = new Intent("MyBroadcastReceiver.GEOFENCE_TRANSITION");
intent.setPackage(context.getPackageName());
pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  

Комментарии:

1. Можете ли вы опубликовать свою запись в манифесте для BroadcastReceiver , которая работает

2. @Ge3ng смотрите обновление в сообщении.

3. используются ли оба этих намерения? Возможно, у вас конфликт идентификаторов

4. Нет, одновременно используется только одно из них.

5. Попробуйте изменить 0 в ваших PendingIntents на уникальные значения.