Java 正在获取服务类中的当前活动名称

Java 正在获取服务类中的当前活动名称,java,android,android-activity,service,Java,Android,Android Activity,Service,您好,我正在尝试获取服务类中的当前活动名称(活动标题) 我试过了 ActivityManager am2 = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE); listelement = am2.getRunningAppProcesses().get(0).processName; 但它不起作用。还有其他想法吗?知道ActivityManager管理活动,所以我们可以从ActivityManager获取信息。我们通过

您好,我正在尝试获取服务类中的当前活动名称(活动标题)

我试过了

ActivityManager am2 = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
listelement = am2.getRunningAppProcesses().get(0).processName;

但它不起作用。还有其他想法吗?

知道
ActivityManager
管理活动,所以我们可以从
ActivityManager
获取信息。我们通过以下方式获得当前的前台运行活动:

 ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
    if(Build.VERSION.SDK_INT > 20)
    {
     String mPackageName = am.getRunningAppProcesses().get(0).processName;
    }
    else
    {
      String mpackageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
    }

服务与活动无关,因此没有直接的方法来实现

我的建议是:从BaseActivity.java扩展活动,在
onResume()
中,可以将当前活动名称保存为应用程序类中的静态变量。然后这将在你的应用程序中随处可见

public class App extends Application {
    public static String currentActivityName;
}

public class MyActivity extends Activity {
    @Override
    protected void onResume() {
        App.currentActivityName = this.getClass().getSimpleName();
    }
}
试试这个

//获取当前最热门的活动

ActivityManager am = (ActivityManager) this .getSystemService(ACTIVITY_SERVICE);
            List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
            ComponentName componentInfo = taskInfo.get(0).topActivity;
            String Actvity_Name = taskInfo.get(0).topActivity.getClassName();
            String PKG_Name = componentInfo.getPackageName();
//在清单文件中添加权限



getRunningTasks不推荐使用。如何将其保存为字符串?我不想知道程序包名称,但想知道活动名称如何在服务上访问此变量?App.currentActivityName;并确保您知道如何在Android中正确实现应用程序类。此错误的原因是:数据库“/data/user/0/com.google.Android.gms/databases/auto_complete_suggestions.db”的SQLiteConnection对象被泄漏!请修复您的应用程序,以正确结束正在进行的事务,并在不再需要数据库时关闭数据库,即使我只执行以下操作:liselement=App.currentActivityName;我正在尝试跟踪点击的活动。即使我在Activity2上,上面也写着Activity1的名字,这不可能是真的。我怎么能每30秒做一次呢?我把它放在计时器上,但getSystemService不希望我这么做。你能在使用它的地方分享你的类代码吗?
if(Actvity_Name.equals("com.example.Your_Activity"))
            {               

            }
<uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>