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
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.
Nasıl benim Android uygulaması arka pl...
Nasıl arka plan rengini değiştirmek iç...
İOS-zorla çıkın, kullanıcı tarafından ...
Bir iOS uygulama arka plana çıktığında...
Nasıl bir veritabanı ile bir Android u...