Как получить имя пакета приложения, работающего в 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