在我的应用程序中,我想使用BroadcastReceiver显示一条消息,但我希望它仅在应用程序未打开且当前正在屏幕上运行时才显示Toast消息(它可能在后台运行)。但我没有找到相应的实施条件的确切代码。
我试过了代码,
ActivityManager manager =
(ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses();
但它在运行另一个应用程序时也会停止消息。
请帮助我如何让我的代码知道当前是否打开了应用程序?感谢。
答案 0 :(得分:-1)
归功于this answer,以及扩展名为cyanogenmod 7。
你已经到了一半。 RunningAppProcessInfo有一个名为pkgList的字段,一个String [],其中包含进程中的所有包名,您可以匹配它以确定它是否是您的应用程序。
private RunningAppProcessInfo getForegroundApp() {
RunningAppProcessInfo result=null, info=null;
if(mActivityManager==null)
mActivityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
List <RunningAppProcessInfo> l = mActivityManager.getRunningAppProcesses();
Iterator <RunningAppProcessInfo> i = l.iterator();
while(i.hasNext()){
info = i.next();
if(info.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND
&& !isRunningService(info.processName)){
result=info;
break;
}
}
return result;
}