2011-02-01 14 views
5

मैं resolveActivityInfo उपयोग कर रहा हूँ निर्धारित करने के लिए अगर मेरे ऐप एक घर लांचर के रूप में स्थापित किया गया था:मुद्दा - resolveActivityInfo()

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(); 

यह एमुलेटर पर अच्छा काम करता है और तीन android उपकरणों मैं हाथ पर है ।

हाल ही में मैंने अपने उपयोगकर्ताओं से त्रुटि रिपोर्ट प्राप्त करना शुरू कर दिया और त्रुटि लॉग दिखाता है कि हल करेंActivityInfo विफल हो रहा है। यह केवल एंड्रॉइड 2.1 अपडेट 1 पर चल रहे कुछ फोनों पर होता है जैसा कि मैं देख सकता हूं। मुझे इस ऐप के कारण मेरे ऐप पर कुछ सकारात्मक टिप्पणियां मिली हैं और कुछ नकारात्मक हैं।

कोई सलाह क्या गलत हो सकती है?

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) 

या

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) 
+2

विशेष अपवाद आप encounteri हैं एनजी आपके कोड से नहीं दिखता है। शायद यह एक छोटी गाड़ी वाला रॉड है जो कुछ लोग उपयोग कर रहे हैं। प्रतिक्रिया के लिए – CommonsWare

+2

धन्यवाद! मेरे पास अब और अधिक रिपोर्ट हैं - पिछले दो दिनों से 30 से थोड़ा अधिक - वे सभी अलग-अलग वाहकों से सैमसंग फोन से आए हैं और सभी एंड्रॉइड 2.1-अपडेट 1 पर चल रहे हैं। लेकिन मेरे पास एक ही फोन मॉडल का उपयोग कर उपयोगकर्ताओं से 5 स्टार रेट और 2.1 पर भी चल रहा है ... आंकड़े जाओ ... – mishkin

उत्तर

1

एंड्रॉइड स्रोत के साथ कुछ शोध किया और मैं अब कॉमन्सवेयर के साथ सहमत हूं कि मेरा कोड सही है। मैं वास्तव में यह 3 सप्ताह पहले बदल दिया intent.resolveactivity के बजाय packagemanager.resolveActivity उपयोग करने के लिए:

this.pm = context.getPackageManager(); 

    try { 
     Intent homeintent = new Intent(Intent.ACTION_MAIN); 
     homeintent.addCategory(Intent.CATEGORY_HOME); 
     homeintent.addCategory(Intent.CATEGORY_DEFAULT);// seems not needed here since This is a synonym for 
           // including 
     // the CATEGORY_DEFAULT in your supplied Intent per doc 

     this.resolveInfo = pm.resolveActivity(homeintent, PackageManager.MATCH_DEFAULT_ONLY); 

     ActivityInfo activityInfo = resolveInfo.activityInfo; 

     userHomeLauncherPackage = activityInfo.packageName; 
     userHomeLauncherClass = activityInfo.name; 

     userHomeLauncherName = activityInfo.loadLabel(pm).toString(); 

     if (userHomeLauncherClass.contains("ResolverActivity")) 
     userHomeLauncherName = ""; 

    } catch (Exception e) { 
     throw new Exception(e); 
    } 

यह बहुत अभी भी इन त्रुटि कभी-कभी हो रही मदद नहीं की ...

स्रोत कोड के आधार पर,

ComponentName Intent.resolveActivity (PackageManager बजे)

या

ActivityInfo Intent.resolveActivityI NFO (PackageManager बजे, पूर्णांक झंडे)

कॉल एक ही विधि android.app.ContextImpl वर्ग में परिभाषित:

ResolveInfo जानकारी = pm.resolveActivity (यह, PackageManager.MATCH_DEFAULT_ONLY)

और यह परिभाषित किया गया है जैसे:

 @Override 
    public ResolveInfo resolveActivity(Intent intent, int flags) { 
     try { 
      return mPM.resolveIntent(
       intent, 
       intent.resolveTypeIfNeeded(mContext.getContentResolver()), 
       flags); 
     } catch (RemoteException e) { 
      throw new RuntimeException("Package manager has died", e); 
     } 
    } 

तो इस बिंदु पर मैं निष्कर्ष पर पहुंचा है कि मैं इस :(बारे में कुछ नहीं कर सकते

+0

नहीं है, मुझे एक ही समस्या दिखाई दे रही है और एक ही निष्कर्ष तक पहुंच गया है। क्या आपने Google को रिपोर्ट की थी? –

+0

मुझे नहीं लगता कि हमें Google को दोष देना चाहिए - यह कोड एमुलेटर में ठीक काम करता है और मैंने एपीआई के सभी संस्करणों को आजमाया। तो यह फर्मवेयर विनिर्माण के साथ कुछ होना चाहिए। – mishkin

+0

यह समस्या Nexus7 पर भी होती है: 'PackageManager manager = context.getPackageManager(); सूची गतिविधियों = manager.queryIntentActivities (इरादा, 0); ' –

4

TeslaCoil सॉफ्टवेयर से केविन यहाँ। आपसे वापस संपर्क में देरी के लिए क्षमा।

public static ComponentName getHomeComponent(PackageManager PM) { 
    Intent home_intent = new Intent("android.intent.action.MAIN"); 
    home_intent.addCategory("android.intent.category.HOME"); 
    home_intent.addCategory("android.intent.category.DEFAULT"); 

    ComponentName cn = home_intent.resolveActivity(PM); 
    if (cn == null) 
     Log.v(TAG, "[Default] package:null"); 
    else 
     Log.v(TAG, "[Default] package:" + cn.getPackageName() + " class:" + cn.getClassName()); 

    return cn; 
} 

resolveActivity सामान्य रूप से अशक्त वापस नहीं करता है, के रूप में यह समाधानकर्ता गतिविधि वापस जाने के लिए अगर कोई डिफ़ॉल्ट सेट है लगता है: यह वही है मैं अपने ऐप्स में होम घटक प्राप्त करने के लिए उपयोग कर रहा हूँ है। लेकिन कुछ फोन या कुछ चीजों पर यह चीजों को दिलचस्प रखने के लिए शून्य हो सकता है। शायद resolActivityInfo संकल्प निष्पादन को कॉल करता है लेकिन शून्य मामले को ठीक से संभाल नहीं करता है।

+0

धन्यवाद केविन! intent.resolve सक्रियता इरादे के समान ही काफी है।resolActivityInfo को हल करें और त्रुटि इन विधियों के अंदर होती है, इसलिए मैं परिणाम को शून्य पर जांच नहीं सकता, क्योंकि इससे पहले विफल हो जाता है। अब मैं 3 सप्ताह के लिए उपयोग कर रहा हूं .resolveActivity (homeintent, PackageManager.MATCH_DEFAULT_ONLY) इसके बजाय अभी भी 2.1 पर चल रहे फ़ोनों से हर दिन कुछ त्रुटियां मिली हैं। मुझे लगता है कि यह एक फर्मवेयर में एक बग है जो मेरा – mishkin