Java 从服务读取当前正在运行的活动
我创建了一个应用程序,它运行一个服务来读取用户当前打开并使用的应用程序/活动。问题是服务只读取启动器应用程序。它不会将循环打开的应用程序/活动返回给我。你能帮忙吗?我写的代码如下。提前谢谢Java 从服务读取当前正在运行的活动,java,android,android-service,Java,Android,Android Service,我创建了一个应用程序,它运行一个服务来读取用户当前打开并使用的应用程序/活动。问题是服务只读取启动器应用程序。它不会将循环打开的应用程序/活动返回给我。你能帮忙吗?我写的代码如下。提前谢谢 @Override public void onStart(Intent intent, int startId) { // For time consuming an long tasks you can launch a new thread here... Toast.makeText(
@Override
public void onStart(Intent intent, int startId) {
// For time consuming an long tasks you can launch a new thread here...
Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show();
Runnable runable = new Runnable() {
public void run() {
try{
ActivityManager am2 = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am2.getRunningTasks(1).get(0).topActivity
.getPackageName();
Log.w("RunningTask", packageName);
handler.postDelayed(this, 8000);
}
catch (Exception e){
}
}
};
handler.postDelayed(runable, 8000);
}
如果您使用Android 5.0或更高版本,
getRunningTasks()
不推荐使用,并且只返回一小部分,包括调用者自己的任务,以及一些其他任务,如home
您可以查看Android 5.1.1之前的getRunningAppProcesses()
。看到和
使用GetRunningAppProcess的示例:
ActivityManager am2 = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
String processName = am2.getRunningAppProcesses().get(0).processName;
Log.w("Running process", processName);
我用的是安卓5.0.1。我只需将
getRunningTasks()
替换为getRunningAppProcesses
?参见上文。请注意,该函数返回的是进程名而不是包名。请参阅,但我想获取包名AM2.getRunningAppProcesses().get(0)。pkgList是进程包名的字符串[]。我根据你的答案找到了解决方案,谢谢<代码>ActivityManager am2=(ActivityManager)getSystemService(Activity.Activity_服务);字符串processName[]=am2.getRunningAppProcesses().get(0.pkgList);Log.w(“正在运行的进程”,进程名[0])代码>试着更明确一点你真正想做什么。例如,如果我真的想知道用户做了什么或者用户去了哪里,我会使用observer模式来存储并在有更新时通知侦听器。监听器接口将由所有包或类实现,这些包或类需要在用户触摸它们时发出通知。