如何在android 5.0(L)中运行应用程序活动名称?
16lz
2021-01-22
I am using the following code to get the current running activity name in android.
我使用下面的代码在android中获取当前运行的活动名称。
ActivityManager am = (ActivityManager) aContext
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> alltasks = am
.getRunningTasks(1);
ComponentName componentInfo = alltasks.get(0).topActivity;
componentInfo.getClassName();
System.out.println("Current:"+componentInfo.getClassName());
This is working fine in all the versions below android 5.0
. But in Android 5.0 it always returning the launcher activity.
这在android 5.0下的所有版本中都运行良好。但在安卓5.0中,它总是返回启动活动。
Please any one help in this because I want to make run the application in all android versions.
请大家帮忙,因为我想在所有android版本中运行这个应用程序。
3 个解决方案
#1
14
Prior to Android L your code will work, but from Android L onward getRunningTask will not work. You have to use getAppRunningProcess.
在Android之前,你的代码将会运行,但是从Android开始,getRunningTask将不会起作用。您必须使用getAppRunningProcess。
Check this code below -
检查下面的代码。
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()]);
}
}
Hope this helps you :)
希望这能帮助你:)
更多相关文章
- Android高版本使用照相机报错 Camera error
- Robotium用例通过代码自动解锁屏幕
- 不同Android版本设备正确获取屏幕分辨率的通用方法
- Android代码性能优化技巧
- eclipse中修改工程的Android版本
- Android公钥私钥及代码详细解读
- 【边做项目边学Android】手机安全卫士04_02:从服务器下载并安装新
- android OSChina 客户端源代码剖析
- Android SDK需要ADT 23或更高版本