#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 на уникальные значения.