2016-05-26 3 views
1

У меня есть приложение для Android, которое регистрирует BroadcastReceiver для обработки изменений режима звонка. Приемник регистрируется через манифест, а не динамически. Некоторые пользователи сообщают, что иногда приложение не реагирует на изменение режима звонка, хотя запуск приложения вручную и последующее изменение режима звонка запускает приложение. Некоторое время спустя, однако, приложение перестает отвечать на изменения режима звонка снова.Как узнать, находится ли приложение Android в состоянии «остановлено»?

Симптом звучит подозрительно, как приложение попадает в состояние «остановлено»; но у меня нет причин полагать, что пользователи явно закрывают приложение, и я не знаю другого способа, которым приложение могло попасть в состояние «остановлено».

Есть ли способ определить, находится ли приложение на их (некорневом) телефоне в остановленном состоянии, поэтому я могу проверить/аннулировать теорию состояния «остановленного»? Я не думаю, что достаточно взглянуть на то, включена ли кнопка принудительного закрытия, так как она будет отключена как для остановленных приложений, так и для приложений, которые в настоящее время не работают.

+0

Вам удалось решить эту проблему? Кажется, у меня то же самое. –

+0

@ GoltsevEugene Нет, все еще проблема для меня. –

+0

Я тоже ищу ответ на этот вопрос. У некоторых Android-ROM, похоже, есть нестандартный переключатель задач, который после убийства приложений помещает их в состояние остановки, тогда как переключатель задач AOSP этого не делает. – davidgyoung

ответ

1

Вы можете запросить все приложения на устройстве и посмотреть, какие из них находятся в остановленном состоянии с этим кодом:

private List<String> getStoppedPackages() { 
    ArrayList<String> stoppedPackages = new ArrayList<String>(); 
    final PackageManager pm = getPackageManager(); 
    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 

    for (ApplicationInfo packageInfo : packages) { 
     boolean appStopped = (packageInfo.flags & ApplicationInfo.FLAG_STOPPED) != 0; 
     if (appStopped) { 
      String description = packageInfo.packageName; 
      stoppedPackages.add(description); 
     } 
    } 
    return stoppedPackages; 
} 

Я сделал приложение утилита, которая делает это для вас здесь:

https://github.com/davidgyoung/stopped-app-detector

+0

Отлично! Спасибо, я погубил, пока мой гуглер не упал и не нашел этого API. Бонусные баллы за создание демонстрационного приложения. Теперь я могу начать создавать справочный список реализаций Android, которые имеют такое поведение. –

+0

Мне было бы интересно поделиться данными о поведении устройства, если вы тоже. Я обнаружил одно устройство, которое запрещает перезапуск службы после убийства в коммутаторе задач. Как ни странно, я вижу, что это происходит, несмотря на остановленное состояние **, а не ** для приложения после его убийства. Интересно, есть ли другой, но похожий флаг. – davidgyoung

Смежные вопросы