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模式来存储并在有更新时通知侦听器。监听器接口将由所有包或类实现,这些包或类需要在用户触摸它们时发出通知。