我正在设计一个使用通知的Android应用程序
在此之前,我正在使用全屏活动,因此如果收到通知,则在完整视图中我没有收到任何警报。
现在我正在使用启用通知的空白活动
当我已经进入应用程序时(例如Skype),我不想显示通知
或者,我想在闪过后立即取消它们
怎么做到这一点?
提前谢谢。
答案 0 :(得分:2)
您可以为所有活动定义超类并跟踪应用的状态。如果所有活动都处于停止状态 - 应用程序在后台,否则 - 在前台。在超级活动的onStart()
和onStop()
方法中,您可以增加和减少可见活动的数量。
public class SuperActivity extends Activity {
private static int sVisibleActivitiesCount;
@Override
public void onStart(){
super.onStart();
sVisibleActivitiesCount++;
}
@Override
public void onStop(){
super.onStart();
sVisibleActivitiesCount--;
}
public static boolean isAppInForeground() {
return sVisibleActivitiesCount > 0;
}
}
现在,您可以在某处检查应用程序状态,如果SuperActivity.isAppInForeground
返回true,则不会创建通知。
第二种方法是使用ActivityLifecycleCallbacks(min API 14)来监视活动生命周期并在一个地方跟踪应用程序状态,而不需要为所有活动提供超类。如果您的应用具有minSdkVersion =“14”,我宁愿使用此方法。
答案 1 :(得分:1)
您可以尝试获取正在运行的进程列表,并检查前台中的那个是否是您的应用程序。
private boolean isAppInForeground() {
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> mRunningProcesses = mActivityManager
.getRunningAppProcesses();
Iterator<RunningAppProcessInfo> i = mRunningProcesses.iterator();
while (i.hasNext()) {
RunningAppProcessInfo runningAppProcessInfo = i.next();
if (runningAppProcessInfo.uid == getApplicationInfo().uid && runningAppProcessInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND)
{
return true;
}
}
return false;
}