在不启动应用程序的情况下启动 activity

start activity without launching the application

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

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;
    }
}

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

在典型的注销场景中,单击注销按钮应该只是开始登录 activity 清除登录详细信息。在你的情况下,5 分钟后你应该尝试清除存储的登录令牌(假设你存储登录详细信息供用户在需要时自动登录)。当用户下次启动应用程序时,您的 LAUNCHER activity 将检查存储的令牌以启动所需的 activity.

startactivity(intent) 弹出后台堆栈 activity 或创建一个新的(如果不存在).. 所以你的解决方案是有 onResume()onPause()。 . onPause() 在 activity 消失时调用,onResume() 在看到 activity 时调用,所以我给你的建议是创建一个布尔值,它可以在单身人士 class

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

然后你在 mainactivity 或用户将启动或返回的 activity 中,将代码放在其 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;
}