启动活动而不启动应用程序

时间:2015-01-22 01:37:54

标签: android android-activity service

以下是用例: 1.用户登录应用程序并按下硬件主页按钮,应用程序将被发送到后台 2.我在后台运行一个处理程序来检查不活动超时是否为5分钟。然后我需要调用logout API并启动loginactivity,不启动或将应用程序带到前台 这是我试过的

if (!mIsAppInForeground) {
            Log.d("App in background", "App in background and timing out");

            activity.startService(new Intent(activity,LogOutBackGroundService.class).addFlags( Intent.FLAG_ACTIVITY_MULTIPLE_TASK ));

        }

public class LogOutBackGroundService extends Service {

    public static final String HAS_SIGNED_OUT = "hasSignedOut";

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        intent.putExtra(HAS_SIGNED_OUT, true);
        startActivity(new Intent(this, LoginActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

        return START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

应用程序正常超时并且正在启动登录活动,但应用程序正处于前台(即应用程序正在启动)。我希望这只发生在后台。只有当用户重新启动应用程序时,他才会再次看到登录屏幕

2 个答案:

答案 0 :(得分:0)

在典型的注销方案中,单击“注销”按钮应该只启动登录活动以清除登录详细信息。在您的情况下,在5分钟之后,您应该尝试清除存储的令牌以进行登录(假设您存储用户的登录详细信息以在需要时自动登录)。当用户下次启动应用程序时,您的LAUNCHER活动将检查存储的令牌以启动所需的活动。

答案 1 :(得分:0)

startactivity(intent)弹出backstack活动或创建一个新活动(如果它不存在)。所以您的解决方案是onResume()onPause() .. onPause()在活动消失时调用,当你看到活动时调用onResume(),所以我给你的建议是创建一个布尔值,它可以在一个单例类中

public class MySingletonClass {
  public static boolean startloginpage; // by default its false
 }

然后你进入主动或用户将启动或返回的活动,将代码放入其onresume

@Override
public void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    if(MySingletonClass.startloginpage){ //check if your boolean is true
        // if it checks out then call do what you want to do when the user times run out
    }else{
      // if it doesn't check out continue without telling user to login,
   }
}

在您的服务中删除意图代码并将其放入

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    intent.putExtra(HAS_SIGNED_OUT, true);
    MySingletonClass.startloginpage = true;
    return START_NOT_STICKY;
}