gpt4 book ai didi

android - 如何获取最顶层 Activity 的任何标识符?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:55 25 4
gpt4 key购买 nike

我有一个服务,它的行为必须在最顶层的 Activity 发生变化时发生变化。假设 Activity A 处于 Activity 状态,然后服务开始某种处理。当 Activity A 不再可见时,此处理必须停止:用户按下“返回”、“主页”或执行任何其他使 Activity A 不可见的操作。此 Activity A 不得知道该服务——即它不得必须明确通知服务它即将离开。

简而言之,有没有办法:

  • 获取最顶层 Activity 的任何类型的标识(对象引用、类名、ID 等),
  • 在最顶层的 Activity 发生变化时收到通知?

附言这听起来像是恶意软件行为,但事实并非如此!这是合法的用例!

编辑: Activity 不在我的应用程序中。它们可以是任何东西——浏览器、 map 应用程序、设置等。

最佳答案

这个顶部部分已经过时了。见底部的答案。

我假设您指的是您自己的应用程序中的 Activity :

所有 Activity 电话onResume()当来到前台和onPause()离开前台时。只需使用您的功能覆盖此方法(确保分别调用 super.onResume()super.onPause()!)。

至于标识符,也许你可以让你的服务有一个静态方法,该方法由进入前台的 Activity 调用(在 onResume() 中),提供对自身、它的类、一些任意 ID 等的引用。

引用:http://developer.android.com/reference/android/app/Activity.html


编辑:

您可以通过 ActivityManager 访问顶级 Activity 的身份-> 运行任务 -> ComponentName .一定要申报<uses-permission android:name="android.permission.GET_TASKS" />在你的 list 中。

Context context = someArbitraryContext;
ActivityManager am = (ActivityManager) context.
getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
String className = am.getRunningTasks(1).get(0).topActivity.getClassName();

至于获得通知,您可能需要每隔 x 毫秒检查一次最重要的 Activity 。

关于android - 如何获取最顶层 Activity 的任何标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3393908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com