区分按下“home”按钮和打开另一个 Activity

2024-04-13

我有三项活动: - 飞溅活动 - 主要活动 - 玩家活动

当然,应用程序从 SplashActivity 启动,然后启动 MainActivity 并关闭。 MainActivity 在某个时刻启动 PlayerActivity 并进入后台。 (MainActivity 处于活动状态,但处于 onStop 状态) 然后我需要打开 MainActivity 并将 PlayerActivity 设置为背景(PlayerActivity 处于活动状态,但处于 onStop 状态)。 然后我需要再次打开 PlayerActivity 并将 MainActivity 设置为后台。

因此,当应用程序从一个活动切换到另一个活动并返回时,PlayerActivity 和 MainActivity 经常会获得 onPause() 和 onStop() 而没有 onDestroy。

每次用户按下“主页”按钮时,我都需要完成所有活动并启动 SplashActivity 应用程序,但主页按钮与活动之间的切换相同(onPause()和 onStop())。所以我无法捕捉到差杀活动。

请帮忙。

EDITED:很遗憾,用户离开提示没有帮助,都是一样的。 如果用户按下 HOME,则调用:

在用户交互上, onUserLeaveHint, 暂停时, 停止

此活动返回先前的活动(主),无需任何用户操作。

公共类 PlayerActivity 扩展 Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(new Intent(PlayerActivity.this, MyActivity.class));
        }
    }, 5000);
}

}

但还是有同样的情况:

在用户交互上, onUserLeaveHint, 暂停时, 停止


据我所知,没有办法覆盖主页按钮或侦听主页按钮按下事件。

但是,您的目标是让应用程序知道发生以下情况并采取行动:

  • 您的所有活动均未显示 -> 您的一项活动正在显示。

发生这种情况时,您希望显示一个启动对话框。

您可以跟踪用户何时在您的应用程序中,并检查用户是否从应用程序内导航到您的活动。

更新:您可以使用以下示例,而不是修改所有活动活动生命周期回调 http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html对象了解何时调用任何 Activity 的生命周期回调。你可以参考我的例子并修改它。我相信 ActivityLifecycleCallbacks.onActivityStarted() 是在 super.onStart() 调用之后调用的,因此在 Activity.onStart() 中调用 super.onStart() 之前,您必须检查 comeFromMyApplication() 。这不太容易出错并且需要更少的代码。

修改的如何检查 Activity 是在前台还是在可见背景中? https://stackoverflow.com/questions/18038399/how-to-check-if-activity-is-in-foreground-or-in-visible-background为了适应这个问题

Example实现自定义应用程序类:

public class MyApplication extends Application {

  public static boolean cameFromMyApplication() {
    return count != 0;
  }  

  public static void activityStarted() {
    count++;
  }

  public static void activityStopped() {
    count--;
  }

  private static int count;
}

在 AndroidManifest.xml 中注册您的应用程序类:

<application
    android:name="your.app.package.MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name" >

将onStart和onStop添加到项目中的每个Activity中(您可以 如果您愿意,请为您的活动创建一个共同的祖先):

@Override
protected void onStart() {
  super.onStart();
  //Do not include this check in the splash screen Activity
  if(!MyApplication.cameFromMyApplication()) {
    //User arrived from outside the application
    //Application specific code (clear Activity backstack & show splash screen in your case)
  }
  MyApplication.activityStarted();
}

@Override
protected void onStop() {
  super.onStop();
  MyApplication.activityStopped();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区分按下“home”按钮和打开另一个 Activity 的相关文章

随机推荐

  • 将 HTML 附加到容器元素而不使用 innerHTML

    我需要一种在不使用innerHTML 的情况下将HTML 附加到容器元素的方法 我不想使用innerHTML的原因是因为当它像这样使用时 element innerHTML htmldata 它的工作原理是先替换所有 html 然后再添加旧
  • 如何制作不完全圆的圆?

    我想做如下图所示的圆角 但我在制作内圆的时候遇到了麻烦 我尝试过border top style border right style但还没有得到相同的结果 circle border radius 50 width 100px heigh
  • Flask 的 jsonify() 中缩小的 JSON

    Flask 提供了方便的jsonify 函数 它从 Python 变量返回 JSON 对象 from flask import Flask jsonify app Flask name app route def json hello re
  • Python - “in”语句搜索对象列表的速度很慢

    我希望有人能解释为什么搜索对象引用列表比搜索普通列表慢得多 这是使用 python in 关键字进行搜索 我认为它以 C 编译器 速度运行 我认为列表只是对象引用 指针 的数组 因此搜索应该非常快 两个列表在内存中的大小正好是 412236
  • ASP.NET Core 3.1 / Identity 会话永不过期。如何让它在滑动到期时到期?

    我的网站的安全检查显示会话 即登录 永远不会过期 我已经测试过自己 发现了同样的情况 今天早上我在本地主机上打开了该网站 但我仍然从昨天开始登录 我一直认为它会在 20 分钟后过期 就像在 NET Framework 应用程序中一样 我使用
  • SQL Server:将 varchar 转换为 INT

    我被困在转换varchar column UserID to INT 我知道 请不要问为什么UserID专栏最初并不是作为 INT 创建的 说来话长 所以我尝试了这个 但它不起作用 并给我一个错误 select CAST userID AS
  • 获取所有 Slack 用户上次活动时间戳的方法

    我正在构建一个 Python 脚本 用于检索我工作的组织的所有 Slack 用户的一组信息 目前 利益相关者要求我检索我们组织的用户上次在 Slack 上活跃的时间 我遇到了users getPresence https api slack
  • 过滤范围、lambda 和 is_sorted

    这是我在过滤迭代器方面遇到的问题的简化版本 因此没有必要要求我以不同的方式重写它以避免过滤器 奇怪的是 仅在真实代码中is sorted似乎有问题 其他用途似乎工作正常 include
  • 如何修剪 JQuery 自动完成框的输入?

    有没有办法将用户输入的输入修剪 删除前导 尾随空格 到 jQuery 自动完成文本中
  • Android - 如何在设备上安装签名的 APK?

    我正处于将签名的 APK 发布到 Android Market 的最后准备阶段 在谷歌的文档 http developer android com guide publishing preparing html他们说 10 测试您编译和签名
  • 以编程方式关闭 JDialog 中显示的 JPanel

    我有一个主应用程序框架 MainFrame class 在 a 的动作执行事件上JButton a JPanel MyJPanel class 将其放入即可打开JDialog 我不延长JDialog创造MyJPanel类 因为我可能也需要
  • Gmail“无法附加空文件”

    我的应用程序使用 iText 库创建一个 PDF 带有已填写表单的模板 PDF 然后我想将其附加到电子邮件中发送 当我尝试附加文件时出现错误Can t attach empty file在 Gmail 应用程序中 还尝试过 HTC 电子邮件
  • 如何旋转图像以对齐文本以进行提取?

    我正在使用 pytesseract 从图像中提取文本 但它不适用于倾斜的图像 考虑下面给出的图像 这是提取文本的代码 它在不倾斜的图像上运行良好 img cv2 imread
  • 无法在 mac os x mojave 上安装 mysqlclient

    我正在尝试在 mac os x mojave 上安装 mysqlclient sudo pip3 install mysqlclient 我收到以下错误 clang Wno unused result Wsign compare Wunre
  • PHP 8.0 中处理未定义数组键的最佳方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 几个月前 我升级到了 PHP 8 0 和许多开发人员一样 我也遇到了这个通知变成警告的麻烦 我不明白处理这个问题的正确方法 所以我想知道如何解决
  • 通过批处理文件终止 MS Access 进程

    我尝试打开 MS Access 延迟大约 5 秒 然后关闭应用程序 使用下面的 bat 文件 我可以打开程序 但在延迟后无法将其关闭 echo off start B Access C Program Files x86 Microsoft
  • 如何让 Emacs 在保存文件时创建中间目录?

    有没有办法在 emacs 中创建文件夹树 类似于 mkdir p in bash 基本上 我希望 emacs 创建所有中间模具 如果它们不存在 当我保存文件时 功能make directory这样做 您的具体问题可能会这样解决 add ho
  • 使用 AngularJS 为 Windows 应用商店应用程序“无法添加动态内容”,但它可以工作

    我正在使用 AngularJS 创建一个 Windows 应用商店应用程序 或 Metro 应用程序 或无论他们如何称呼它 我解决了 Javascript 运行时错误 无法添加动态内容 该错误导致应用程序崩溃 请参阅here http on
  • 为什么 Java 在其语言语法中不使用 out 参数,而 C# 则使用?

    虽然我不太喜欢在 C 中使用 out 参数 但我想知道为什么 Java 选择不在其语言语法中包含它 是否有任何特殊原因 或者可能是因为一个人可以简单地将对象作为参数类型传递 可能是因为设计者觉得没有必要允许多种返回对象的方式 关于委托 泛型
  • 区分按下“home”按钮和打开另一个 Activity

    我有三项活动 飞溅活动 主要活动 玩家活动 当然 应用程序从 SplashActivity 启动 然后启动 MainActivity 并关闭 MainActivity 在某个时刻启动 PlayerActivity 并进入后台 MainAct