una studio por personalizar pasar para otro nombre iconos icono compartir como celular cambiar app aplicaciones aplicacion android android-5.0-lollipop

android - studio - ¿Cómo obtener el nombre `getTopActivity` u obtener actualmente el nombre del paquete de la aplicación en lollipop?



como pasar aplicaciones de un celular a otro por bluetooth (7)

Estoy creando una aplicación de bloqueo de aplicaciones. ¿Cómo obtener la tarea de ejecución actual en lollipop? getRunningTaskinfo método getRunningTaskinfo está en desuso en la API de lollipop, entonces, ¿cómo superar este problema?



La mejor solución para obtener la aplicación Running en API 21 o superior es probarla a continuación. este trabajo para mi

private String retriveNewApp() { if (VERSION.SDK_INT >= 21) { String currentApp = null; UsageStatsManager usm = (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE); long time = System.currentTimeMillis(); List<UsageStats> applist = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time); if (applist != null && applist.size() > 0) { SortedMap<Long, UsageStats> mySortedMap = new TreeMap<>(); for (UsageStats usageStats : applist) { mySortedMap.put(usageStats.getLastTimeUsed(), usageStats); } if (mySortedMap != null && !mySortedMap.isEmpty()) { currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } Log.e(TAG, "Current App in foreground is: " + currentApp); return currentApp; } else { ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); String mm=(manager.getRunningTasks(1).get(0)).topActivity.getPackageName(); Log.e(TAG, "Current App in foreground is: " + mm); return mm; } }


La respuesta de @Manish Godhani ( https://.com/a/38829083/8179249 ) funciona muy bien, ¡pero tienes que dar los permisos adecuados para esto!

Vea los dos primeros puntos de esa respuesta: https://.com/a/42560422/8179249

Funciona para mí (antes de agregar permisos, también me estaba volviendo ''nulo''), como se muestra a continuación:


Prueba esto ... Esto funcionó para mí.

ActivityManager activityManager = (ActivityManager) getSystemService (Context.ACTIVITY_SERVICE); if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) { String packageName = activityManager.getRunningAppProcesses().get(0).processName; } else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { String packageName = ProcessManager.getRunningForegroundApps(getApplicationContext()).get(0).getPackageName(); } else { String packageName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName(); }


Puede usar el AccessibilityService para obtener la aplicación Running actual. El servicio de accesibilidad proporciona el evento onAccessibilityEvent.

Lo siguiente es un código de muestra.

@Override public void onAccessibilityEvent(AccessibilityEvent event) { if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { if (event.getPackageName() != null && event.getClassName() != null) { Log.d("Foreground App", event.getPackageName().toString()); } } }

Puede encontrar más información sobre el Servicio de Accesibilidad here


Se puede lograr así .....

ActivityManager am =(ActivityManager)context.getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); ActivityManager.RunningTaskInfo task = tasks.get(0); // current task ComponentName rootActivity = task.baseActivity; rootActivity.getPackageName();//*currently active applications package name*

Para piruleta:

ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); if(Build.VERSION.SDK_INT > 20){ String activityName =mActivityManager.getRunningAppProcesses().get(0).processName; } else{ String activityName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName(); }

para un ejemplo completo mira esto ...


prueba esto:

ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); if(Build.VERSION.SDK_INT > 20){ String mPackageName = mActivityManager.getRunningAppProcesses().get(0).processName; } else{ String mpackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName(); }

podemos usar UsageStats:

public static String getTopAppName(Context context) { ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); String strName = ""; try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { strName = getLollipopFGAppPackageName(context); } else { strName = mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName(); } } catch (Exception e) { e.printStackTrace(); } return strName; } private static String getLollipopFGAppPackageName(Context ctx) { try { UsageStatsManager usageStatsManager = (UsageStatsManager) ctx.getSystemService("usagestats"); long milliSecs = 60 * 1000; Date date = new Date(); List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, date.getTime() - milliSecs, date.getTime()); if (queryUsageStats.size() > 0) { Log.i("LPU", "queryUsageStats size: " + queryUsageStats.size()); } long recentTime = 0; String recentPkg = ""; for (int i = 0; i < queryUsageStats.size(); i++) { UsageStats stats = queryUsageStats.get(i); if (i == 0 && !"org.pervacio.pvadiag".equals(stats.getPackageName())) { Log.i("LPU", "PackageName: " + stats.getPackageName() + " " + stats.getLastTimeStamp()); } if (stats.getLastTimeStamp() > recentTime) { recentTime = stats.getLastTimeStamp(); recentPkg = stats.getPackageName(); } } return recentPkg; } catch (Exception e) { e.printStackTrace(); } return ""; }

// PARA HABILITAR USAGE_STATS

// Declare USAGE_STATS permisssion in manifest <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" /> Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); startActivity(intent);