如何检测我的Android应用程序是否显示?

问题描述:

我有一个Android应用程序,其服务在后台运行,执行各种客户端/服务器连接。如果显示我的应用中的任何屏幕,我如何检查正在运行的服务?如何检测我的Android应用程序是否显示?

你可以得到正在运行的进程的列表,并检查,如果你是在前台用下面的代码:

ActivityManager actMngr = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 

List<RunningAppProcessInfo> runningAppProcesses = actMngr.getRunningAppProcesses(); 
for (RunningAppProcessInfo pi : runningAppProcesses) { 
    if (getPackageName().equals(pi.processName)) { 

     boolean inForeground = pi.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND; 
    } 
} 

时请在http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html

+0

这很好,谢谢。 – Lysandus 2011-05-26 14:20:28

+0

您可能需要IMPORTANCE_VISIBLE,而不是FOREGROUND,以防您的应用程序可见,但在其上有另一个服务的对话框。 – 2013-04-04 01:23:19

+0

这对我不起作用 – 2014-10-22 19:27:53

Refreshing an Activity from service when Active 几个选项:

•有活动注册在的onResume(该服务的监听对象),并在onPause(删除)

•发送私人广播,拿起由通过registerReceiver()活动时,它是在前台

•有活动提供一个“等待结果”式的PendingIntent到服务

•使用ResultRe ceiver

•使用ContentProvider的,与该活动举办到光标从供应商,服务更新提供商

看到这里https://github.com/commonsguy/cw-advandroid/tree/master/AdvServices/了几个例子。

要检查服务是否正在运行使用

ActivityManager manager = (ActivityManager) MyApp.getSharedApplication().getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (CTConstants.MyService_Name.equals(service.service.getClassName())) { 
      //Your service is running 
     } 
    } 

如果您不想将此作为普通功能进行概括,请将第一行替换为

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);