我正在使用Firebase向应用程序发送通知,并基于通知将用户定向到某些活动。到目前为止,我遇到的问题是,如果应用程序在后台运行,将显示的活动是主要活动,但是我无法完全管理它。
我相信这里有几个问题,但并没有完全得到我要找的答案。
任何帮助或建议都很好,谢谢
答案 0 :(得分:0)
Android 10(API级别29)和更高的位置限制,说明当应用程序在后台运行时应用程序何时才能启动活动。这些限制有助于最大程度地减少对用户的干扰,并使用户更好地控制其屏幕上显示的内容。
答案 1 :(得分:0)
尝试
/**Flag to determine if the Activity is visible*/
private static boolean activityVisible;
private static boolean activityDestroy;
/**Is the application actually visible on the mobile screen*/
public static boolean isActivityVisible(){
return activityVisible;
}
/**Is the application actually destroyed*/
public static boolean isActivityDestroy(){
return activityDestroy;
}
/**Is the application actually destroyed*/
public static void activityDestroy(boolean isDestroy){
activityDestroy = isDestroy;
}
/**Is the application actually in the background*/
public static boolean isActivityInBackground(){
return !activityVisible;
}
/**Change the state of the Application to resume*/
public static void activityResumed() {
activityVisible = true;
}
/**Change the state of the Application to paused*/
public static void activityPaused() {
activityVisible = false;
}
然后进行检查
Application app = ((Application)getApplicationContext());
boolean visible = app.isActivityVisible();
答案 2 :(得分:0)
您可以使用importance的ActivityManager字段。 在C#使用Xamarin的方法下面,但它与Java非常相似。
P.S .:如果您愿意,可以将该代码移植到Java
public static Importance GetAppState(Context context, string packageName)
{
try
{
var manager = (ActivityManager)context.GetSystemService(Context.ActivityService);
var processes = manager.RunningAppProcesses;
if (processes != null)
foreach (var process in processes)
if (process.ProcessName.Equals(packageName))
return process.Importance;
}
catch
{
}
return Importance.Gone;
}