J'utilise le code suivant pour obtenir le nom de l'activité en cours dans Android.
ActivityManager am = (ActivityManager) aContext
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> alltasks = am
.getRunningTasks(1);
ComponentName componentInfo = alltasks.get(0).topActivity;
componentInfo.getClassName();
System.out.println("Current:"+componentInfo.getClassName());
Cela fonctionne correctement dans toutes les versions ci-dessous Android 5.0
. Mais dans Android 5.0, il renvoie toujours l’activité de lancement .
S'il vous plaît n'importe quelle aide dans ceci parce que je veux faire exécuter l'application dans toutes les versions d'Android.
Avant Android L, votre code fonctionnera, mais à partir d’Android L, getRunningTask ne fonctionnera pas. Vous devez utiliser getAppRunningProcess.
Vérifiez ce code ci-dessous -
public class DetectCalendarLaunchRunnable implements Runnable {
@Override
public void run() {
String[] activePackages;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KitKat_WATCH) {
activePackages = getActivePackages();
} else {
activePackages = getActivePackagesCompat();
}
if (activePackages != null) {
for (String activePackage : activePackages) {
if (activePackage.equals("com.google.Android.calendar")) {
//Calendar app is launched, do something
}
}
}
mHandler.postDelayed(this, 1000);
}
String[] getActivePackagesCompat() {
final List<ActivityManager.RunningTaskInfo> taskInfo = mActivityManager.getRunningTasks(1);
final ComponentName componentName = taskInfo.get(0).topActivity;
final String[] activePackages = new String[1];
activePackages[0] = componentName.getPackageName();
return activePackages;
}
String[] getActivePackages() {
final Set<String> activePackages = new HashSet<String>();
final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
activePackages.addAll(Arrays.asList(processInfo.pkgList));
}
}
return activePackages.toArray(new String[activePackages.size()]);
}
}
J'espère que cela vous aide :)
Vous pouvez utiliser ceci:
String packageName = "";
String className = "";
UsageStatsManager usageStatsManager = (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE);
if (usageStatsManager != null)
{
UsageEvents queryEvents = usageStatsManager.queryEvents(System.currentTimeMillis() - 10000, System.currentTimeMillis());
if (queryEvents != null)
{
UsageEvents.Event event = new UsageEvents.Event();
while (queryEvents.hasNextEvent())
{
UsageEvents.Event eventAux = new UsageEvents.Event();
queryEvents2.getNextEvent(eventAux);
if (eventAux.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND)
{
event = eventAux;
}
}
packageName = event.getPackageName();
className = event.getClassName();
}
}
Vous avez besoin de Android.permission.PACKAGE_USAGE_STATS, qui est une autorisation système et ne sera pas accordé aux applications tierces. Toutefois, la déclaration de l'autorisation implique l'intention d'utiliser l'API et l'utilisateur du périphérique peut accorder l'autorisation à l'aide de l'application Paramètres.
Ou tu peux faire:
pm grant com.your.package Android.permission.PACKAGE_USAGE_STATS
Veuillez vérifier link .
Malheureusement, Android 5.0 n’a pas d’équivalent: il n’est pas possible d’obtenir la majeure partie de l’activité, ni d’être rappelé si une nouvelle application/activité est lancée en temps réel.