2012-05-18 1 views
3

J'ai un service sous Android et j'ai besoin de savoir si une application est active ou si le "bureau" (écran d'accueil) est net. Je ne sais pas si c'est le mot approprié pour se référer à l'écran d'accueil du téléphone. Comment puis-je savoir si cela est au point ou une autre application?android: comment savoir si l'écran d'accueil est au point

A l'intérieur du service que j'ai ce code pour obtenir les tâches en cours d'exécution:

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
// get the info from the currently running task 
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
ComponentName componentInfo = taskInfo.get(0).topActivity; 

Comment puis-je savoir de ComposantInfo si tel est le bureau ou non? Sur l'émulateur, le componentInfo.getPackageName() renvoie com.android.launcher mais dans une galaxie s1 (j'ai testé uniquement dans ce téléphone) renvoie autre chose.

Il existe un autre moyen de le faire?

Merci.

+0

« Je dois savoir si est une application sur le focus ou si le "bureau" (écran d'accueil) est au centre "- pourquoi? – CommonsWare

+0

Mon impression est que vous ne pouvez pas * de manière fiable * déterminer cela. Et se rendre compte que les remplacements d'écran d'accueil sont une catégorie d'application aussi. –

+0

c'est moins important pourquoi. En quelques mots, je construis une application qui aide les parents à protéger leur téléphone si un enfant de 2 à 4 ans veut jouer au téléphone. Et pour cette application, je dois faire quelque chose quand l'enfant va à l'écran d'accueil. –

Répondre

0

Si vous souhaitez obtenir le contrôle lorsque "l'écran d'accueil est mis au point", implémentez un écran d'accueil.

+0

Je n'ai pas besoin d'implémenter un écran d'accueil, juste pour empêcher des utilisateurs spécifiques (les enfants) de l'utiliser. Pour cette raison, j'ai besoin de savoir quand l'écran d'accueil est l'activité principale. –

+0

@ZelterAdy: Et le moyen pour vous "de savoir quand l'écran d'accueil est l'activité principale" est pour vous d'être l'écran d'accueil. – CommonsWare

+0

Merci pour votre réponse. Tous les écrans d'accueil devraient avoir quelque chose en commun, n'est-ce pas? Comment le système d'exploitation reconnaît-il une application comme écran d'accueil? –

4
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
ComponentName currentTask = taskInfo.get(0).topActivity; 

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
mainIntent.addCategory(Intent.CATEGORY_HOME); 
mPackageManager = getPackageManager(); 

List<ResolveInfo> appList = mPackageManager.queryIntentActivities(mainIntent, 0); 
for(int i = 0; i < appList.size(); i++) { 
    ResolveInfo apl = appList.get(i); 
    if(currentTask.getPackageName().equals(apl.activityInfo.packageName)) { 
     Log.e(TAG, "ONHOMESCREEN"); 
    } 
} 

Et AndroidManifest.xml vous besoin de la permission

<uses-permission android:name="android.permission.GET_TASKS"/> 
+0

Fonctionne très bien. Merci pour le partage ...;) –

+0

Fonctionne sur Android 7 encore. woohoo – Vlad

1

Essayez cette fonction,

public boolean isUserIsOnHomeScreen() 
{ 
    ActivityManager manager = 
      (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses(); 
    for (RunningAppProcessInfo process : processes) 
    { 
     if(process.pkgList[0].equalsIgnoreCase("com.android.launcher")) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

    } 
    return false; 

} 
Questions connexes