3

我想知道当我打开一个应用程序时如何获取包名,例如,当我打开 Facebook 时,我应该得到它的包名,当我打开另一个应用程序时,我应该得到它的包名,我该怎么做?

4

3 回答 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 回答