【问题标题】:Redirect to particular Activity when launching app from recents从最近启动应用程序时重定向到特定活动
【发布时间】:2015-01-10 10:10:41
【问题描述】:

假设您在 Activity A 中并按下主页按钮,现在您的应用将转到后台。现在长按你的主页按钮,你可以看到最近的应用程序。如果我点击我的应用程序,它应该采取特定活动而不是活动 A。

【问题讨论】:

  • 你为什么不把你喜欢的“开始”活动作为你的开始活动(MainActivity)?
  • 覆盖onResume的活动并开始你想要的女巫活动,在onCreate()onPause()中设置一个标志
  • 如何识别用户已按下主页按钮并从最近返回?从一个活动移动到另一个活动时,会调用相同的活动生命周期方法@shayanpourvatan
  • 当您从家里返回活动或其他活动onResume()已被清除时,您可以在该方法中处理
  • 如何确定他们是从最近的活动或其他活动中回来的? @shayanpourvatan

标签: android android-activity android-homebutton


【解决方案1】:

参考这篇文章 - How can I detect user pressing HOME key in my activity? 已实现以下逻辑。

使用上面的帖子检测主页按钮按下并将标志存储在首选项中。当通过第一个 OnRestart() 方法从最近的列表中启动应用程序时,将被触发,因此请检查主页按钮按下标志并启动特定活动。

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        if (isApplicationSentToBackground(this)) {
            // Do what you want to do on detecting Home Key being Pressed
             preferences.setHomeButtonPressed(true);
        }

    }

    @Override
    protected void onRestart() {
        super.onRestart();
    // Do what you want to do on detecting app launching from recents section
        if (preferences.isHomeButtonPressed()) {
            Intent i = new Intent(this,
                    ParticularActivity.class);
            startActivity(i);
            preferences.setHomeButtonPressed(false);
        }

    }

    public static boolean isApplicationSentToBackground(final Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(context.getPackageName())) {
                return true;
            }
        }
        return false;
    }

【讨论】:

    【解决方案2】:

    我认为这是一个奇怪的要求,但你可以这样做:

    @Override
    public void onResume() {
       startActivity(new Intent(this, TargetActivity.class));
    }   
    

    onResume() 在您的应用处于“运行”状态之前被调用

    【讨论】:

    • 这段代码是错误的,因为onResume() 是第一次调用并且当前活动永远不会运行,您必须使用在onCreate 中设置为false 的一个标志来处理它并将其更改为@ 987654326@ 在 onPause 和 onResume 中检查 if(flag) start TargetActivity
    • 它总是会开始新的活动。当用户从最近的应用程序启动应用程序时,我想启动一个活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多