我想知道当我打开一个应用程序时如何获取包名,例如,当我打开 Facebook 时,我应该得到它的包名,当我打开另一个应用程序时,我应该得到它的包名,我该怎么做?
问问题
6008 次
3 回答
0
Playstore 中有一个第三方应用程序,它显示“包名称”以及 Activity 的名称。在这里找到它:
https://play.google.com/store/apps/details?id=com.willme.topactivity&hl=en_IN
于 2020-01-06T12:38:41.293 回答
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);
}
于 2017-07-14T13:46:52.430 回答
0
要在后台获取正在运行的应用程序的包名称,您需要运行一项服务并每隔 100 或 300 毫秒调用一次以下方法,它将为您提供当前正在运行的包名称。有关更多详细信息,您可以查看此链接,在此方法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 毫秒一次,那么只有您可以锁定其他应用程序。
于 2017-07-14T13:57:00.400 回答