我有一个服务,当最顶层的 Activity 发生变化时,它的行为必须改变。假设,活动 A 处于活动状态,然后服务开始某种处理。当 Activity A 不再可见时,此处理必须停止:用户按下“后退”、“主页”或执行任何其他操作使 Activity A 不可见。此 Activity A 不得知道该服务——即,它不必明确通知该服务它即将消失。
简而言之,有没有办法:
- 获取最顶层 Activity 的任何类型的标识(对象引用、类名、ID 等),
- 当最上面的 Activity 发生变化时收到通知?
附:这听起来像是恶意软件行为,但事实并非如此!这是合法的用例!
编辑:活动不在我的应用程序中。它们可以是任何东西——浏览器、地图应用程序、设置等等。
这个顶部部分已经过时了。答案见底部。
我假设您指的是您自己的应用程序中的活动:
所有活动请致电onResume()
当来到前台并且onPause()
当离开前台时。只需用您的功能覆盖此方法(请务必调用super.onResume()
and super.onPause()
分别!)。
至于标识符,也许你可以让你的服务有一个静态方法,由进入前台的活动调用(在onResume()
),提供对其自身、其类、某些任意 ID 等的引用。
参考:http://developer.android.com/reference/android/app/Activity.html http://developer.android.com/reference/android/app/Activity.html
Edit:
您可以通过以下方式访问顶级 Activity 的身份ActivityManager
-> 运行任务 ->ComponentName
。一定要申报<uses-permission android:name="android.permission.GET_TASKS" />
在你的清单中。
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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)