如何检测Android中其他应用程序的运行活动?

如何检测Android中其他应用程序的运行活动?,android,android-activity,Android,Android Activity,是否可以检测到另一个应用程序何时在前台运行 是否可以检测当前处于前台的应用程序的特定活动 例如,如果我有一个包id com.netflix.mediaclient,我需要检测com.netflix.mediaclient.MediaPlayer何时处于活动状态。Hiii public class DetectCalendarLaunchRunnable implements Runnable { @Override public void run() { String[] activePa

是否可以检测到另一个应用程序何时在前台运行

是否可以检测当前处于前台的应用程序的特定活动

例如,如果我有一个包id com.netflix.mediaclient,我需要检测com.netflix.mediaclient.MediaPlayer何时处于活动状态。

Hiii

public class DetectCalendarLaunchRunnable implements Runnable {

@Override
public void run() {
  String[] activePackages;
  if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
    activePackages = getActivePackages();
  } else {
    activePackages = getActivePackagesCompat();
  }
  if (activePackages != null) {
    for (String activePackage : activePackages) {
      if (activePackage.equals("com.google.android.calendar")) {
        //Calendar app is launched, do something
      }
    }
  }
  mHandler.postDelayed(this, 1000);
}

String[] getActivePackagesCompat() {
  final List<ActivityManager.RunningTaskInfo> taskInfo = mActivityManager.getRunningTasks(1);
  final ComponentName componentName = taskInfo.get(0).topActivity;
  final String[] activePackages = new String[1];
  activePackages[0] = componentName.getPackageName();
  return activePackages;
}

String[] getActivePackages() {
  final Set<String> activePackages = new HashSet<String>();
  final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager.getRunningAppProcesses();
  for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
    if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
      activePackages.addAll(Arrays.asList(processInfo.pkgList));
    }
  }
  return activePackages.toArray(new String[activePackages.size()]);
}
}  
公共类DetectCalendarLaunchRunnable实现可运行{
@凌驾
公开募捐{
字符串[]activePackages;
if(Build.VERSION.SDK\u INT>Build.VERSION\u code.KITKAT\u WATCH){
activePackages=getActivePackages();
}否则{
activePackages=getActivePackagesCompat();
}
if(activePackages!=null){
for(字符串activePackage:activePackages){
if(activePackage.equals(“com.google.android.calendar”)){
//日历应用程序已启动,请执行某些操作
}
}
}
mHandler.postDelayed(这个,1000);
}
字符串[]GetActivePackageCompat(){
最终列表taskInfo=mActivityManager.getRunningTasks(1);
final ComponentName ComponentName=taskInfo.get(0).topActivity;
最终字符串[]activePackages=新字符串[1];
activePackages[0]=componentName.getPackageName();
返回活动包;
}
字符串[]getActivePackages(){
final Set activePackages=new HashSet();
最终列表processInfos=mActivityManager.getrunningappprocesss();
对于(ActivityManager.RunningAppProcessInfo processInfo:processInfos){
if(processInfo.importance==ActivityManager.RunningAppProcessInfo.importance\u前台){
addAll(Arrays.asList(processInfo.pkgList));
}
}
返回activePackages.toArray(新字符串[activePackages.size()]);
}
}  

这可以为您提供正在运行的活动名称

,在创建活动时,您始终可以通过getLocalClassName()获取类名。您看到了以下答案吗:我想这就是您想要的