Android OnApplicationPause / OnApplicationResume - PullRequest
       25

Android OnApplicationPause / OnApplicationResume

0 голосов
/ 22 сентября 2011

Есть ли способ справиться, когда мое приложение для Android переходит в фоновый режим и обратно?

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

Обратите внимание, что я не могу использовать Activity.OnPauseМетоды OnResume.У меня есть много действий в моем приложении, и если я буду обрабатывать OnPause / OnResume, это возможно в тот момент, когда пользователь переключает одно действие на другое, приложение будет выглядеть как фон, если оно будет на переднем плане на самом деле

Ответы [ 3 ]

0 голосов
/ 22 сентября 2011

Не совсем чистый способ сделать это, о котором я знаю, но,

Возможно, вы могли бы отправить Намерение в вашу Службу onCreate() и onPause() с уникальным идентификатором.

ВыСлужба может затем запустить таймер (с задержкой, которая будет больше, чем разница между onPause и onCreate, вызываемой в каждом действии), который, если не получено уведомление о onCreate() в течение этого времени, установит действие как "Приостановлено ".

Если вы добавите эту функцию в родительский класс, который расширяет Activity, вы можете затем включить эту же функциональность в каждый класс, расширив ее, а не Activity (с контрактом, который вы должны вызвать super.onCreate() иsuper.onPause() в каждом соответствующем методе).

0 голосов
/ 26 января 2012

Проблема решена следующим образом (код C #, моно для Android)

class MyService : Service{
  OnSomethingHappened(){
    ActivityManager am = (ActivityManager) GetSystemService(ActivityService);
    if(am.RunningAppProcesses.Any((arg) => 
      arg.ProcessName == "myprocessname" &&
      arg.Importance == ActivityManager.RunningAppProcessInfo.ImportanceForeground
    )){
       Trace("FOREGROUND!!!!");
    }else{
       Trace("BACKGROUND!!!!");
    }
  }
}
0 голосов
/ 22 сентября 2011

Обратите внимание, что я не могу использовать методы Activity.OnPause / OnResume. у меня много действия в моем приложении, и если я буду обрабатывать OnPause / OnResume, это возможно в момент, когда пользователь переключает одно действие на другое, приложение будет выглядеть как фон, оно будет полностью передним на самом деле

Почему бы вам не написать базовый класс, который расширяет Activity и включает или отключает службу в этих методах? После этого продлите все свои действия из этой базовой деятельности. Все, что вам нужно сделать, это вызвать метод суперкласса, если вы переопределяете эти методы в своей деятельности, например, позвонив по номеру super.onResume() внутри onResume(), чтобы убедиться, что они все еще вызывают. Если вы не переопределите их, все будет работать напрямую.

...