我有一个服务,当最顶层的Activity更改时,它的行为必须改变。比如,活动A处于活动状态,然后服务开始某种处理。当活动A不再可见时,此处理必须停止:用户按下“返回”,“主页”或执行任何使活动A不可见的操作。此活动A必须不知道该服务 - 即它必须不必明确告知服务它将要离开。
简而言之,有办法:
P.S。这可能听起来像恶意软件行为,但事实并非如此!这是合法的用例!
编辑:活动不在我的申请中。它们可以是任何东西 - 浏览器,地图应用程序,设置等。
答案 0 :(得分:22)
这个顶部已经过时了。见底部以获得答案。
我假设您在自己的应用程序中引用了活动:
所有活动在前往前景时调用onResume()
,在离开前景时调用onPause()
。只需使用您的功能覆盖此方法(请务必分别致电super.onResume()
和super.onPause()
。)。
对于标识符,也许你可以让你的服务有一个静态方法,由一个活动调用到前台(在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();
至于获取通知,您可能只需每x毫秒检查一次活动。
答案 1 :(得分:1)
创建baseActivity
并从baseActivity
扩展所有其他活动,在onResume中将当前活动保存在Global类中的公共静态中(在我的案例中扩展应用程序)
public class baseActivity extends Activity {
@Override
protected void onResume() {
super.onResume();
Global.Activity = this;
}
}
其他活动
public class mainActivity extends baseActivity {
// You Can Use Global.Activity Everywhere ! , Even in a Object Extended Class
}