Как получить имя пакета приложения, работающего в Android

Я хочу знать, как получить имя пакета при открытии приложения, например, когда я открываю Facebook, я должен получить имя его пакета, а когда я открываю другое приложение, я должен получить имя его пакета, как мне это сделать?

2 ответа

Чтобы получить имя пакета для запущенного приложения в фоновом режиме, вам нужно запустить одну службу и вызывать метод, описанный ниже, каждые 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 мсек, тогда только вы можете заблокировать другие приложения.

Я не показываю вам имя пакета, когда вы открываете конкретное приложение, но вы можете использовать этот код для вывода списка имен всех приложений, установленных на вашем устройстве.

Я не думаю, что приложение для Android может иметь привилегию "прослушивать" запуск другого приложения. Этого можно добиться только с помощью пользовательского ПЗУ.

Вы можете сделать это с 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);
}

В игровом магазине есть одно стороннее приложение, в котором отображается имя пакета вместе с именем действия. Найдите его здесь:

https://play.google.com/store/apps/details?id=com.willme.topactivity&hl=en_IN

Другие вопросы по тегам