2010-01-02 6 views
0

Je souhaite ajouter des raccourcis d'écran d'accueil à des salles de conversation individuelles, dans mon application. Voici mon code pour le faire:Etrange force fermer sur acore lors de l'ajout d'un raccourci d'écran d'accueil

Intent roomIntent = roomIntent(room).putExtra("shortcut", true); 

Intent intent = new Intent(); 
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, roomIntent); 
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, room.name); 

Parcelable resource = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); 
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, resource); 

setResult(RESULT_OK, intent);  
finish(); 

Quand je vais ajouter le raccourci à mon écran d'accueil, je reçois une force Close, pas sur mon propre processus, mais com.android.acore (!). J'ai exécuté le débogueur et vérifié que mon code est exécuté jusqu'à l'appel à finish().

Si je le fais plutôt pour la EXTRA_SHORTCUT_ICON:

intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, R.drawable.icon); 

Il fonctionne très bien et place le raccourci, et le raccourci se comporte correctement - mais bien sûr le raccourci a le stock icône Android, pas le mien, puisque ce n'est pas la bonne façon de spécifier l'icône.

Lorsque je regarde le code source d'autres applications qui ont fait cela, et au the one example de celui-ci dans la zone de référence Android officielle, mon code semble identique. Mon icône est une norme 48x48 png que j'utilise pour l'icône principale de l'application, sans problèmes. J'ai vérifié ce problème sur un émulateur en cours d'exécution stock 1.6, n'ont pas testé d'autres versions.

Je n'ai aucune idée de ce que je fais mal. Des idées?

+0

Exécutez-vous votre code sur l'émulateur? La plupart du temps, quand je déploie mon application sur l'émulateur, j'ai un peu de 'Force close' sur android.acore ou autre. Mais cela n'a pas d'impact sur mon application et je ne les obtiens pas lorsque je débogue sur un vrai périphérique. Je les ignore juste ... – tbruyelle

+0

J'ai également testé ceci sur mon téléphone, qui exécute le dernier CyanogenMod. Il obtient la même erreur. Je suis allé à l'émulateur pour m'assurer que ce n'était pas une chose spécifique à CyanogenMod. L'erreur est également 100% cohérente dans les deux cas, donc je ne pense pas que ce soit quelque chose de spécifique à un périphérique ou à un émulateur. – Konklone

Répondre

1

Le Javadoc pour ACTION_CREATE_SHORTCUT dit que vous devez utiliser pour EXTRA_SHORTCUT_ICON_RESOURCEIntent.ShortcutIconResource objets, plutôt que la clé vous EXTRA_SHORTCUT_ICON à l'aide, qui est utilisé pour placer directement un Bitmap dans les Intent extras.

Vous devriez probablement déposer aussi un bug de l'accident sur le Android bug tracker, comme obtenir quelque chose comme ça mal ne devrait pas faire tomber acore.

+0

Oui, bien sûr. J'ai continué à comparer mon code avec le code d'autres personnes, mais je n'ai pas compris ce changement. C'était différent parce que je copiais/collais le code de raccourci originairement d'une autre application, qui place réellement un bitmap directement dans les extras. MERCI! – Konklone

+0

Content que ça marche! :) –

+1

J'ai suivi vos conseils et déposé un bug: http://code.google.com/p/android/issues/detail?id=5791 – Konklone

Questions connexes