Android应用程序从后台更改为前台

时间:2014-11-19 08:46:54

标签: android android-activity

我有一个带有设置和身份验证活动的应用A.每当启动某个其他应用程序(比如应用程序B)时,就会启动身份验证活动,因此如果身份验证成功,则会显示应用程序B的启动器活动(一种应用程序锁定保护)。我有两个行为要解释,

  1. 当我的应用A最小化时,我将启动应用B.这将触发应用A的身份验证活动。如果身份验证成功,那么我立即查杀身份验证活动使用finish()。但这将完成身份验证活动,它将带来以前最小化的App A活动(我不希望这种情况发生),而不是将其带到新应用程序。

  2. 如果App A完全没有运行(甚至没有最小化),则启动身份验证活动,并且在成功验证后,将显示App B的活动。

  3. 有人可以解释为什么要显示这两种不同的行为。同样在案例1中,我也希望在成功验证后显示应用2的活动。

1 个答案:

答案 0 :(得分:0)

我也在寻找像这样的东西。 但我确实找到了一些超出教学大纲的解决方案,例如使用后台服务或使用getTasks方法或使用包管理器等。

我所做的最简单的解决方案就是这样。

public class MainApplication extends Application implements Application.ActivityLifecycleCallbacks {
private static boolean background = false;
private static int count = 0;
@Override
public void onCreate() {
    super.onCreate();
    registerActivityLifecycleCallbacks(this);
}

@Override
public void onActivityCreated(Activity activity, Bundle bundle) {

}

@Override
public void onActivityStarted(Activity activity) {
   if(background){
       background = false;
       Log.v("activityFocus", "Activity came in foreground ");
       Toast.makeText(getApplicationContext(), "Foreground", Toast.LENGTH_SHORT).show();
   }
}

@Override
public void onActivityResumed(Activity activity) {
    count++;
}

@Override
public void onActivityPaused(Activity activity) {
    count--;
}

@Override
public void onActivityStopped(Activity activity) {
 if(count==0){
     Log.v("activityFocus", "Activity is in background ");
     Toast.makeText(getApplicationContext(), "Background", Toast.LENGTH_SHORT).show();
     background=true;
 }
}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

}

@Override
public void onActivityDestroyed(Activity activity) {

}

}