Android: как я могу получить текущее открытое имя приложения на экране?

Пожалуйста, предложите мне, как я могу получить текущее открытое имя приложения, даже если есть домашний экран на устройстве, тогда я найду «Начальный экран открыт».

Ну вот

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); List l = am.getRecentTasks(1, ActivityManager.RECENT_WITH_EXCLUDED); Iterator i = l.iterator(); PackageManager pm = this.getPackageManager(); while (i.hasNext()) { ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); try { CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo( info.processName, PackageManager.GET_META_DATA)); Log.w("LABEL", c.toString()); } catch (Exception e) { // Name Not FOund Exception } } 

Вы также можете перечислить запущенные задачи с помощью кода ниже:

 ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE); List li = am.getRunningTasks(100); Iterator i = li.iterator(); PackageManager pm = getApplicationContext().getPackageManager(); while (i.hasNext()) { try { ActivityManager.RunningTaskInfo info = (ActivityManager.RunningTaskInfo)(i.next()); String ac = info.baseActivity.getPackageName(); CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo( ac, PackageManager.GET_META_DATA)); Log.v("asd", c.toString()); } catch (Exception e) { e.printStackTrace(); } } 

Для меня приведенный выше пример не помог. Так я закончил тем, что использовал это:

 ActivityManager am = (ActivityManager) this .getSystemService(ACTIVITY_SERVICE); List l = am.getRecentTasks(1, ActivityManager.RECENT_WITH_EXCLUDED); Iterator i = l.iterator(); PackageManager pm = this.getPackageManager(); while (i.hasNext()) { try { Intent intent = i.next().baseIntent; List list = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo( list.get(0).activityInfo.packageName, PackageManager.GET_META_DATA)); Toast.makeText(this, "Application name: " + c.toString(), Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(this, "Application name not found: " + e.toString(), Toast.LENGTH_LONG).show(); } } 

Использовать AccessibilityService

  • Вы можете обнаружить текущее активное окно с помощью AccessibilityService.
  • В обратном вызове onAccessibilityEvent проверьте тип события TYPE_WINDOW_STATE_CHANGED, чтобы определить, когда изменяется текущее окно.
  • Проверьте, является ли окно активным, вызвав PackageManager.getActivityInfo ().

Я тестировал и работал в Android 2.2 (API 8) через Android 7.1 (API 25).

 public class MyAccessibilityService extends AccessibilityService { @Override protected void onServiceConnected() { super.onServiceConnected(); //Configure these here for compatibility with API 13 and below. AccessibilityServiceInfo config = new AccessibilityServiceInfo(); config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; if (Build.VERSION.SDK_INT >= 16) //Just in case this helps config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS; setServiceInfo(config); } @Override public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) { Log.d("ABC-",accessibilityEvent.getPackageName()+" -- "+accessibilityEvent.getClassName()); if (accessibilityEvent.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { if (accessibilityEvent.getPackageName() != null && accessibilityEvent.getClassName() != null) { ComponentName componentName = new ComponentName( accessibilityEvent.getPackageName().toString(), accessibilityEvent.getClassName().toString() ); ActivityInfo activityInfo = tryGetActivity(componentName); boolean isActivity = activityInfo != null; if (isActivity) Log.i("CurrentActivity", componentName.flattenToShortString()); } } } private ActivityInfo tryGetActivity(ComponentName componentName) { try { return getPackageManager().getActivityInfo(componentName, 0); } catch (PackageManager.NameNotFoundException e) { return null; } } @Override public void onInterrupt() { } } 

С этим вы можете получить текущее имя приложения

  Resources appR = getApplicationContext().getResources(); CharSequence txt = appR.getText(appR.getIdentifier("app_name","string", getApplicationContext().getPackageName())); System.out.println(txt+" APp Name"); 

Просто используя этот код

 getActivity().getApplicationInfo().packageName 

Он дает вам информацию о приложении, а затем вызывает имя пакета.

  • Невозможно решить метод setLatestEventInfo
  • Android Studio Exclude Class из сборки?
  • Отладка службы
  • Просмотр списка фильтров Android
  • Метод getContactsFromFirebase () возвращает пустой список
  • Пользовательский флажок
  • Активная ссылка URL-адреса Android в TextView
  • Android - Как установить предпочтение в коде
  • android как работать с asynctasks progressdialog
  • Компилятор Lame MP3 Encoder для Android
  • Добавить и удалить вид из макета
  • Давайте будем гением компьютера.