Comment puis-je utiliser PackageManager.addPreferredActivity()?
Dans le SDK 1.5 j'ai été en utilisant le PackageManager classe pour définir le préféré de l'écran d'accueil à mon application en utilisant PackageManager.addPackageToPreferred(). Dans le nouveau SDK (à l'aide d'2.1), de ce qui a été déprécié, donc je suis en train d'utiliser addPreferredActivity() pour le même résultat, mais il ne fonctionne pas comme prévu.
Quelques informations de base nécessaires. Je suis en train d'écrire un verrouillage de l'écran de remplacement app donc je veux la touche d'accueil pour le lancement de mon application (qui est déjà en cours d'exécution, donc avoir l'effet de la désactivation de la clé). Lorsque l'utilisateur "débloque" l'écran j'ai l'intention de restaurer le mappage de sorte que tout fonctionne comme d'habitude.
Dans mon AndroidManifest.xml j'ai:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS">
</uses-permission>
Dans mon code j'ai le code suivant:
//Set as home activity
//This is done so we can appear to disable the Home key.
PackageManager pm = getPackageManager();
//pm.addPackageToPreferred(getPackageName());
IntentFilter filter = new IntentFilter("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");
ComponentName[] components = new ComponentName[]
{
new ComponentName("com.android.launcher", ".Launcher")
};
Context context = getApplicationContext();
ComponentName component = new ComponentName(context.getPackageName(),
MyApp.class.getName());
pm.clearPackagePreferredActivities("com.android.launcher");
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY,
components, component);
Le comportement qui en résulte est que l'application sélecteur vient quand j'appuie sur la touche Home, ce qui indique que le clearPackagePreferredActivities() appel a travaillé, mais mon application n'a pas ajouté de préférence. Aussi, la première ligne dans le journal ci-dessous dit quelque chose à propos de "chute d'activité préféré de l'Intention":
04-06 02:34:42.379: INFO/PackageManager(1017): ensemble de résultats changé, à l'abandon d'activité préféré de l'Intention { act=android.l'intention.d'action.PRINCIPALES cat=[android.l'intention.de la catégorie.La MAISON] flg=0x10200000 } type null
04-06 02:34:42.379: INFO/ActivityManager(1017): Démarrage de l'activité: l'Intention { act=android.l'intention.d'action.PRINCIPALES cat=[android.l'intention.de la catégorie.La MAISON] flg=0x10200000 cmp=android/com.android.interne.app.ResolverActivity }
Personne ne sait ce que ce premier message du journal des moyens? Peut-être que je ne suis pas en utilisant l'API correctement, des idées? Toute aide serait grandement appréciée.
- Beaucoup de détails sur la question. J'espère que vous obtenez votre réponse. Bienvenue à Débordement de Pile.
Vous devez vous connecter pour publier un commentaire.
@afonseca: j'avais le même problème. Merci pour le code, je l'ai utilisé pour commencer. Merci également Shimon. J'ai fusionné sa réponse dans la mienne. J'ai obtenu le code de travail (sur 1.6 et 2.1 update 1). Il a été ajusté un peu, mais les 2 principaux changements semblent être les Shimons suggestion et: ".Lanceur" a été changé pour "com.android.lanceur.Lanceur". Le code de travail est affichée ci-dessous.
Ciao, a2ronus
Cette réponse peut venir un peu en retard mais l'API docs dit pour
clearPackagePreferredActivities
:Donc, je pense que dans "la restauration de la cartographie" la seule chose que vous pouvez faire est quelque chose comme:
et vider le paramètre par défaut pour l'écran d'ACCUEIL.
Cela semble fonctionner pour moi si j'initialise le
components
tableau deALL HOME
applications sur l'appareil:Mon problème est de savoir comment dois-je remplir dynamiquement.
addPreferredActivity ne fonctionne plus en 2.2, clearPackagePreferredActivities fonctionne toujours, mais vous ne pouvez nette préférence pour le forfait que vous exécuter sur.
il y a beaucoup de discussions sur android google groupes sur ce problème et google, la position officielle (pour l'instant) de ne pas vous fournir des méthodes pour annuler les préférences de l'utilisateur.