2013-04-15 2 views
0

У меня есть широковещательный приемник, который запускает службу, и в этой службе я должен проверить, активно ли мое основное приложение или в фоновом режиме. Существуют ли какие-либо методы, как это сделать?Как определить, что приложение для Android в фоновом режиме?

ответ

2

Вы можете расширить класс приложения и сохранить текущее состояние приложения. Вам нужно будет обновить его из всех методов onPause() и onResume().

public class MyApplication extends Application { 

    public static boolean isAppVisible() { 
     return visible; 
    } 

    public static void inForeground() { 
     visible = true; 
    } 

    public static void inBackground() { 
     visible = false; 
    } 

    private static boolean visible; 
} 

Зарегистрируйте свой класс приложения в AndroidManifest.xml:

<application 
    android:name="your.app.package.MyApplication" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" > 

Добавить OnPause и onResume каждой деятельности в рамках проекта (вы можете создать общий суперкласс для вашей деятельности, если вы хотите, но если ваша деятельность уже простиралась от MapActivity/ListActivity и т.д., вам все еще нужно написать следующее вручную):

@Override 
protected void onResume() { 
    super.onResume(); 
    MyApplication.inBackground(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    MyApplication.inForeground(); 
} 
+0

Отлично! Спасибо, это действительно помогает мне! –

0
Context ctx = context.getApplicationContext(); 

ActivityManager am = (ActivityManager) context 
     .getSystemService(ACTIVITY_SERVICE); 

// get the info from the currently running task 
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 

PackageManager pm = this.getPackageManager(); 
boolean flag = false; 
try { 
    /** 
    * take fore ground activity name 
    */ 
    ComponentName componentInfo = taskInfo.get(0).topActivity; 
    if (printLog) { 
     Log.d("Tag", "CURRENT Activity ::" 
       + taskInfo.get(0).topActivity.getClassName()); 
     Log.d("Tag", "Number Of Activities : " 
       + taskInfo.get(0).numRunning); 
     Log.d("Tag", 
       "Componenet Info : " + componentInfo.getPackageName()); 
     Log.d("Tag", 
       "Componenet Info : " + componentInfo.getClassName()); 
    } 
    /** 
    * All activities name of a package to compare with fore ground 
    * activity. if match found, no notification displayed. 
    */ 
    PackageInfo info = pm.getPackageInfo(
      "com.package_name", 
      PackageManager.GET_ACTIVITIES); 
    ActivityInfo[] list = info.activities; 

    for (int i = 0; i < list.length; i++) { 
     Log.d("Tag","Activity : "+list[i].name); 

     if (list[i].name.equals(componentInfo.getClassName())) { 
      flag = true; 
     } 
    } 

    if(flag) 
    { 
     //activity is running 
    } 
} catch (NameNotFoundException e) { 
    e.printStackTrace(); 
} 

И принять <uses-permission android:name="android.permission.GET_TASKS" /> разрешение в манифесте.

0

Принимая во внимание реализацию приложения, которое отслеживает, идет ли приложение вперед или назад, используя onPause() и onResume().
Посмотрите на это solution.
Надеюсь, это поможет.

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