SORU
10 Aralık 2010, Cuma


Nasıl bir Android uygulaması arka plana gider ve ön plana çıktığında tespit

Ön plana geri, biraz zaman sonra getirildiğinde özel bir uygulama yazmaya çalışıyorum. Bir şekilde bir uygulamayı arka plana gönderilen ya da ön plana algılamaya var mı?

CEVAP
22 Mart 2013, Cuma


Bu sorunu çözmeyi başardım. Etkinlik geçişleri arasındaki zaman bir referans kullanarak muhtemelen bir uygulama "" veya değil. backgrounded olduğunu yeterli kanıt olacağı varsayımına dayalı olarak çalışır

İlk olarak, bir android kullandım.app.Uygulama örneği (hadi Ara MyApplication) olan bir Zamanlayıcı, bir TimerTask, bir sabiti temsil etmek için en fazla kaç milisaniye o geçişten bir etkinlik için başka bir makul olabilir (gittim bir değeri 2'ler), ve bir boolean olup olmadığını belirtmek için app "arka plan":

public class MyApplication extends Application {

    private Timer mActivityTransitionTimer;
    private TimerTask mActivityTransitionTimerTask;
    public boolean wasInBackground;
    private final long MAX_ACTIVITY_TRANSITION_TIME_MS = 2000;
    ...

Uygulama ayrıca başlangıç ve zamanlayıcı/görev: durdurmak için iki yöntem sağlar

public void startActivityTransitionTimer() {
    this.mActivityTransitionTimer = new Timer();
    this.mActivityTransitionTimerTask = new TimerTask() {
        public void run() {
            MyApplication.this.wasInBackground = true;
        }
    };

    this.mActivityTransitionTimer.schedule(mActivityTransitionTimerTask,
                                           MAX_ACTIVITY_TRANSITION_TIME_MS);
}

public void stopActivityTransitionTimer() {
    if (this.mActivityTransitionTimerTask != null) {
        this.mActivityTransitionTimerTask.cancel();
    }

    if (this.mActivityTransitionTimer != null) {
        this.mActivityTransitionTimer.cancel();
    }

    this.wasInBackground = false;
}

Son parça bu çözüm ekleyin bir ara Her bu yöntemler onResume() ve onPause() etkinlikler tüm etkinlikler, tercihen bir temel Etkinlik olan senin somut Faaliyetleri devralmak:

@Override
public void onResume()
{
    super.onResume();

    MyApplication myApp = (MyApplication)this.getApplication();
    if (myApp.wasInBackground)
    {
        //Do specific came-here-from-background code
    }

    myApp.stopActivityTransitionTimer();
}

@Override
public void onPause()
{
    super.onPause();
    ((MyApplication)this.getApplication()).startActivityTransitionTimer();
}

Yani bu durumda kullanıcı sadece navigasyon arasında faaliyetlerin uygulaması, onPause() Kalkan aktivite başlar zamanlayıcı, ama hemen yeni bir etkinlik olarak girdi iptal zamanlayıcı önce ulaşabilir max geçiş süresi. Ve bu yüzdenwasİnBackgroundoluryanlış.

Etkinlik simgeden ön plan, cihazı uyandırmak için geldiğinde diğer yandan, etc. son telefon görüşmesi, daha zamanlayıcı görev, bu olay öncesinde yürütülen ve böylecewasİnBackgroundoldu ayarlayındoğru.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • GUN-TIME with Brandon

    GUN-TIME wit

    3 ŞUBAT 2009
  • ModNation Racers H.Q.

    ModNation Ra

    31 Ocak 2010