problème avec la résolution de l'activité d'une intention - resolveActivityInfo()
Je suis en utilisant resolveActivityInfo pour déterminer si mon application a été défini comme une maison lanceur:
PackageManager pm = getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_HOME);
userHomePackage = intent.resolveActivityInfo(pm, 0).packageName;
userHomeActivityClass = intent.resolveActivityInfo(pm, 0).name;
currentHomeLauncherName = intent.resolveActivityInfo(pm, 0).loadLabel(pm).toString();
il fonctionne très bien sur émulateur et trois appareils android que j'ai sur les mains.
Récemment, j'ai commencé à recevoir des rapports d'erreur à partir de mes utilisateurs et journal des erreurs montre que resolveActivityInfo est un échec. Cela se produit uniquement sur quelques téléphones fonctionnant sous android 2.1 update 1 que je peux voir. J'ai déjà reçu de nombreux commentaires positifs sur mon app et un peu de négatif à cause de ce problème.
Des conseils tout ce qui pourrait être mauvais?
java.lang.NullPointerException
at android.os.Parcel.readException(Parcel.java:1224)
at android.os.Parcel.readException(Parcel.java:1206)
at android.content.pm.IPackageManager$Stub$Proxy.resolveIntent(IPackageManager.java:1418)
at android.app.ApplicationContext$ApplicationPackageManager.resolveActivity(ApplicationContext.java:2046)
at android.content.Intent.resolveActivityInfo(Intent.java:3790)
at com.myapp.myappname.Launcher.setAsHomeApplicationBeforeFroyo(Launcher.java:336)
OU
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myappname/com.myapp.myappname.Launcher}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2497)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2513)
at android.app.ActivityThread.access$2200(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1864)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4370)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.os.Parcel.readException(Parcel.java:1224)
at android.os.Parcel.readException(Parcel.java:1206)
at android.content.pm.IPackageManager$Stub$Proxy.resolveIntent(IPackageManager.java:1418)
at android.app.ApplicationContext$ApplicationPackageManager.resolveActivity(ApplicationContext.java:2046)
at android.content.Intent.resolveActivityInfo(Intent.java:3790)
at com.myapp.myappname.Launcher.showHomeChooserDialog(Launcher.java:141)
at com.myapp.myappname.Launcher.showNextActivity(Launcher.java:122)
at com.myapp.myappname.Launcher.onCreate(Launcher.java:59)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2460)
... 11 more
java.lang.NullPointerException
at android.os.Parcel.readException(Parcel.java:1224)
at android.os.Parcel.readException(Parcel.java:1206)
at android.content.pm.IPackageManager$Stub$Proxy.resolveIntent(IPackageManager.java:1418)
at android.app.ApplicationContext$ApplicationPackageManager.resolveActivity(ApplicationContext.java:2046)
at android.content.Intent.resolveActivityInfo(Intent.java:3790)
at com.myapp.myappname.Launcher.showHomeChooserDialog(Launcher.java:141)
L'exception particulière que vous rencontrez ne semble pas être à partir de votre code. C'est peut-être un buggy modded ROM que certaines personnes utilisent.
merci pour la réponse! J'ai plus de rapports maintenant un peu plus de 30 pour les deux derniers jours - tous d'entre eux venaient de téléphones samsung à partir de différents supports et de tous fonctionnant sur android 2.1-update1. Mais j'ai aussi 5 étoiles de taux d'utilisateurs à l'aide de la même, les modèles de téléphone en cours d'exécution sur 2.1 ainsi...allez comprendre...
merci pour la réponse! J'ai plus de rapports maintenant un peu plus de 30 pour les deux derniers jours - tous d'entre eux venaient de téléphones samsung à partir de différents supports et de tous fonctionnant sur android 2.1-update1. Mais j'ai aussi 5 étoiles de taux d'utilisateurs à l'aide de la même, les modèles de téléphone en cours d'exécution sur 2.1 ainsi...allez comprendre...
OriginalL'auteur mishkin | 2011-02-01
Vous devez vous connecter pour publier un commentaire.
Kevin de TeslaCoil Software ici. Désolé pour le retard dans l'obtention de retour à vous. C'est ce que j'utilise pour obtenir la Maison et dans mon apps:
resolveActivity n'a pas l'habitude de retourner la valeur null, car il me semble de retour, le résolveur de l'activité s'il n'y a pas de réglage par défaut. Mais, sur certains téléphones ou quelque chose, il peut retourner null juste pour garder les choses intéressantes. Peut-être resolveActivityInfo appels resolveActivity mais ne gère pas la valeur null correctement.
OriginalL'auteur Kevin TeslaCoil
fait quelques recherches avec android source et je suis plutôt d'accord maintenant avec Commonsware que mon code est juste. J'ai effectivement redessinée il y a 3 semaines d'utilisation packagemanager.resolveActivity au lieu d'intention.resolveactivity:
Il n'a pas aidé afin de toujours obtenir ces erreurs de temps à autre...
Basé sur le code source,
Nomcomposant Intention.resolveActivity (PackageManager pm)
ou
ActivityInfo Intention.resolveActivityInfo (PackageManager h, int flags)
appel à la même méthode définie dans android.app.ContextImpl classe:
ResolveInfo info = pm.resolveActivity(ce, PackageManager.MATCH_DEFAULT_ONLY)
et il est défini comme:
donc, à ce moment, je suis venu à la conclusion que je ne peux pas faire quelque chose à ce sujet 🙁
Je ne pense pas que nous devrions blâmer google - ce code fonctionne très bien dans l'émulateur et j'ai essayé toutes les versions de l'api. donc, il doit être quelque chose avec fabrique de firmware.
Ce problème se produit également sur Nexus7 :
PackageManager manager = context.getPackageManager(); List<ResolveInfo> activities = manager.queryIntentActivities(intent, 0);
OriginalL'auteur mishkin