Исключить из списка последних приложений только для Android 4.4.2

Я хотел бы исключить свое приложение из списка последних приложений (долгое нажатие на дом, кнопку многозадачности и т. д.), НО только для Android 4.4.1 и 4.4.2. Причина в том, что в этих версиях Android службы не могут перезапускаться, и моя служба уничтожается, когда мое приложение удаляется из списка недавних. Обычно перезагружается без проблем, но на 4.4.1 и 4.4.2 этого не происходит.

Я знаю, что вы можете добавить android:excludeFromRecents="true" в манифест, но это исключит его во всех версиях Android.

Я попробовал то, что было предложено здесь, но не могу заставить его работать:

Программно удалить приложение из последних приложений

Есть идеи?


person Flyview    schedule 03.03.2015    source источник


Ответы (2)


Чтобы исключить себя из списка недавних задач на 4.4 (не только 4.4.2):

Шаг 1. Создайте res/values/bools.xml с ресурсом bool, назовите его is_44 и установите значение false.

Шаг № 2. Создайте res/values-v19/bools.xml с ресурсом bool с именем is_44 и значением true.

Шаг 3. Создайте res/values-v21/bools.xml с bool, назовите is_44 и установите значение false.

Шаг 4. Используйте android:excludeFromRecents="@bool/is_44" в <activity>

Таким образом, для уровней API 19 и 20 вы будете исключены из недавних, но не для других уровней API.

person CommonsWare    schedule 03.03.2015
comment
Хотя это конкретно не нацелено на 4.4.2, для меня этого достаточно, поэтому я выберу его как правильный ответ. Я предполагаю, что нет никакого способа сделать это программно, когда мы знаем точную версию сборки? Кроме того, я думаю, вы перепутали логические значения, разве вы не хотели бы, чтобы это было правдой для v19? - person Flyview; 05.03.2015
comment
@Flyview: я думаю, что нет возможности сделать это программно, когда мы знаем точную версию сборки? -- Я так не думаю. Кроме того, я думаю, вы перепутали логические значения, разве вы не хотели бы, чтобы это было правдой для v19? - нет, я думаю, что я прав. is_not_44 должно быть false для 19 и 20 (Android 4,4/4,4 Вт) и true для всего остального. - person CommonsWare; 05.03.2015
comment
Но тогда android:excludeFromRecents становится ложным для v19 и v20! Разве мы не хотим, чтобы это было правдой, чтобы приложение было исключено из списка последних приложений? - person Flyview; 05.03.2015
comment
Также я заметил, что, хотя этот подход работает для удаления приложения из списка недавних для 4.4.x, приложение по-прежнему отображается в списке недавних при доступе к открытию списка с активностью, все еще на переднем плане. Это по-прежнему позволяет пользователю смахнуть его и тем самым навсегда убить службу. - person Flyview; 05.03.2015
comment
@Flyview: ::вздох:: Думаю, меня смутил тройной минус. is_44 будет true для 19 и 20, и поэтому вы будете исключены из недавних для них. приложение по-прежнему отображается в списке недавних, если доступ к открытию списка с активностью все еще находится на переднем плане - я не знаю, как повлиять на это поведение. - person CommonsWare; 05.03.2015
comment
Отлично, я уже использовал is_44. Спасибо за редактирование вашего ответа! Вы что-то вроде знаменитости stackoverflow. :) - person Flyview; 05.03.2015

Если Android 4.4.x достаточно точен, вы можете создать папку layout-v19 и определить дополнительный макет для действия, которое следует исключить из списка последних приложений:

<activity 
    android:name=".anActivity"
    android:excludeFromRecents="true"
    ...>

См. документацию Предоставление ресурсов (найдите Platform версия) и уровни API здесь

person Trinimon    schedule 03.03.2015
comment
Вероятно, это сработает, но ответ CommonsWare более элегантный. Спасибо! - person Flyview; 05.03.2015