Кто-нибудь знает, есть ли какие-либо изменения в том, как Android 7.0 (Нуга) обрабатывает намерения по сравнению с Android 6.0 (Lollipop)?Android 7 намерений не хватает
Короче говоря: мое приложение работает по назначению на всех версиях от 4.1 (16) до 6.0 (23), но падает на android 7.0 (24)!
Приложение создает ожидающее намерения с намерением использовать собственный широковещательный приемник, который имеет дополнительные функции. Однако в андроиде 7 ни одна из дополнительных функций не присутствует в намерении, полученном широковещательным приемником.
MainActivity.java
Intent intent = new Intent(context, PollServerReceiver.class);
// TODO: Remove after DEBUGGING is completed!
intent.putExtra("TESTING1", "testing1");
intent.putExtra("TESTING2", "testing2");
intent.putExtra("TESTING3", "testing3");
// PendingIntent to be triggered when the alarm goes off.
final PendingIntent pIntent = PendingIntent.getBroadcast(context,
PollServerReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Setup alarm to schedule our service runs.
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, firstRun, freqMilis, pIntent);
PollServerReceiver.java
Bundle extras = intent.getExtras();
Log.d(TAG, "onReceive: TESTING1 = " + extras.getString("TESTING1")); // null here
// None of the three "TESTING*" keys are there!
for (String key : extras.keySet()) {
Object value = extras.get(key);
Log.d(TAG, String.format("onReceive extra keys: %s %s (%s)", key, value.toString(), value.getClass().getName()));
}
Стек след, очевидно, дает NullPointerException как причину аварии. Это было бы не так странно, если бы он рухнул среди всех версий, но в этом случае его только последний Android. У кого-нибудь есть идеи, пожалуйста?
Примечание: Я попытался создать ожидающие намерения с различными флагами, включая (0
, PendingIntent.FLAG_UPDATE_CURRENT
, PendingIntent.FLAG_CANCEL_CURRENT
) все еще получил тот же результат.
Я не могу воспроизвести вашу проблему, используя код из вашего вопроса, поэтому я предполагаю, что, возможно, настоящий код не соответствует коду вопроса. В вашем реальном коде есть ли какие-либо ваши дополнительные функции в виде пользовательских классов «Parcelable»? – CommonsWare
Да, кроме трех тестовых дополнений String, я также сохраняю объект Parcelable в том же намерении. Разумеется, он также отсутствует в намерении, полученном на приемнике, а также в дополнительных файлах дерева. – Konaras
24 не позволяет передать объект Parcelable в AlarmManager, http://stackoverflow.com/questions/38466080/dp5-7-0-does-adding-extras-to-a-pending-intent-fail –