如何获取在android中运行的应用程序的包名称

时间:2017-07-13 17:35:53

标签: android package-name

我想知道如何在打开应用程序时获取软件包名称,例如当我打开Facebook时,我应该获取其软件包名称,当我打开另一个应用程序时,我应该获取其软件包名称,我该怎么做? / p>

2 个答案:

答案 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毫秒,只有你可以锁定其他应用程序。