如何获得最顶层活动的任何标识符?

Ign*_*kas 11 android

我有一个服务,当最顶层的Activity更改时,它的行为必须改变.比如,活动A处于活动状态,然后服务开始某种处理.当活动A不再可见时,此处理必须停止:用户按下"返回","主页"或执行任何使活动A不可见的操作.此活动A必须不知道该服务 - 即它必须不必明确告知服务它正在消失.

简而言之,有没有办法:

  • 获取最顶层Activity的任何类型的标识(对象引用,类名,ID等),
  • 最顶层活动更改时收到通知?

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

编辑:活动不在我的应用程序中.它们几乎可以是任何东西 - 浏览器,地图应用程序,设置等.

And*_*ang 22

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

我假设你指的是你自己的应用程序中的活动:

所有活动onResume()在前往前景和onPause()离开前景时都会呼叫.只需重写此方法与功能(一定要打电话super.onResume(),并super.onPause()分别!).

至于标识符,也许你可以让你的服务有一个静态方法,由一个活动来到前台(in onResume())调用,提供对它自己的引用,它的类,一些任意的ID等.

参考:http://developer.android.com/reference/android/app/Activity.html


编辑:

您可以通过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();
Run Code Online (Sandbox Code Playgroud)

至于获取通知,您可能只需每x毫秒检查一次顶级活动.