我想知道如何在打开应用程序时获取软件包名称,例如当我打开Facebook时,我应该获取其软件包名称,当我打开另一个应用程序时,我应该获取其软件包名称,我该怎么做? / p>
答案 0 :(得分:0)
打开特定应用时,我没有向您显示包名称,但您可以使用此代码列出设备上安装的所有应用的包名称。
我不认为Android应用程序可以“听”启动另一个应用程序的权限。您只能通过自定义ROM实现此目的。
您可以使用PackageManager
。
final PackageManager manager = getPackageManager();
List<ApplicationInfo> packages = manager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo info : packages) {
Log.i("Info", "Installed package:" + info.packageName);
}
答案 1 :(得分:0)
要获取后台正在运行的应用程序的包名称,您需要运行一个服务并每100或300毫秒调用以下方法,它将为您提供当前运行的包名称。有关详细信息,您可以看到此link,您可以在链接中找到此方法AndroidUtils
。
public String getRecentApps(Context context) {
String topPackageName = "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
UsageEvents usageEvents = mUsageStatsManager.queryEvents(time - 1000 * 30, System.currentTimeMillis() + (10 * 1000));
UsageEvents.Event event = new UsageEvents.Event();
while (usageEvents.hasNextEvent()) {
usageEvents.getNextEvent(event);
}
if (event != null && !TextUtils.isEmpty(event.getPackageName()) && event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
if (AndroidUtils.isRecentActivity(event.getClassName())) {
return event.getClassName();
}
return event.getPackageName();
} else {
topPackageName = "";
}
} else {
ActivityManager am = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
// If the current running activity it will return not the package name it will return the activity refernce.
if (AndroidUtils.isRecentActivity(componentInfo.getClassName())) {
return componentInfo.getClassName();
}
topPackageName = componentInfo.getPackageName();
}
return topPackageName;
}
如果您的应用是AppLocker,您应该更频繁地调用此方法 每隔100毫秒,只有你可以锁定其他应用程序。