2011-05-24 8 views
14

मैं वर्तमान गतिविधि और/या इसके मूल अनुप्रयोग से जुड़े लोगो को मैनिफेस्ट में परिभाषा से लोड करने का प्रयास कर रहा हूं। इस तकनीक को पहले से ही शीर्षक और आइकन दोनों के साथ जुड़े लोड हो रहा है पर सफलतापूर्वक काम किया है, लेकिन लोगो हमेशा null या 0.लोड गतिविधि और/या एप्लिकेशन लोगो प्रोग्रामेटिक रूप से मैनिफेस्ट

यहाँ लौटने प्रकट से प्रासंगिक जानकारी के साथ मैं काम कर रहा हूँ है:

<application 
    android:icon="@drawable/ic_launcher" 
    android:logo="@drawable/ad_logo" 
    android:label="@string/app_name" 
    android:hardwareAccelerated="true"> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:logo="@drawable/ad_logo"> 

activity ऊपर परिभाषित गतिविधि का एक उदाहरण जा रहा है के साथ, मैं निम्नलिखित (परिणाम एनोटेट इनलाइन) की कोशिश की है:

PackageManager pm = activity.getPackageManager(); 
ComponentName cn = activity.getComponentName(); 
ApplicationInfo ai = activity.getApplicationInfo(); 

//ACTIVITY LABEL: Works 
pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadLabel(pm); 

//APPLICATION LABEL: Works 
ai.loadLabel(pm); 
//APPLICATION LABEL: Works 
pm.getApplicationLabel(ai); 

//ACTIVITY ICON: Works 
pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadIcon(pm); 
//ACTIVITTY ICON: Works 
pm.getActivityIcon(cn); 

//APPLICATION ICON: Works 
pm.getApplicationIcon(ai); 
//APPLICATION ICON: Works 
ai.loadIcon(pm); 

//ACTIVITY LOGO: Does not work 
pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).loadLogo(pm); 
//ACTIVITY LOGO: Does not work 
pm.getActivityInfo(cn, PackageManager.GET_ACTIVITIES).logo 
//ACTIVITY LOGO: Does not work 
pm.getActivityLogo(cn); 

//APPLICATION LOGO: Does not work 
pm.getApplicationLogo(ai); 
//APPLICATION LOGO: Does not work 
pm.getApplicationLogo(activity.getApplication().getPackageName()); 
//APPLICATION LOGO: Does not work 
ai.loadLogo(pm); 

//APPLICATION LOGO: Does not work 
pm.getApplicationInfo(ai.packageName, 0).loadLogo(pm); 
//APPLICATION LOGO: Does not work 
ai.logo; 

किसी को भी पता है कैसे ठीक करने के लिए इन Targ के दोनों या तो या लोगो लोड करने के लिए ETS?

संपादित: लोगो समर्थन एपीआई स्तर 9. आवश्यकता उपकरणों मैं पर परीक्षण कर रहा हूँ emulators और भौतिक उपकरणों सभी runing एपीआई स्तर से 10 इस कोड 3.0+ पर कभी नहीं निष्पादित किया जाएगा रहे हैं।

+0

मैं अभी इसका परीक्षण नहीं कर सकता, लेकिन शायद गतिविधि में 'एंड्रॉइड: लोगो' रखने में भी समस्या है? यह एक एप्लिकेशन विशेषता है, एक गतिविधि नहीं है। दूसरे को हटाने का प्रयास करें। – Aleadam

+0

@Aleadam मैंने देखा कि इसे [विनिर्देश] में परिभाषित नहीं किया गया था (http://developer.android.com/guide/topics/manifest/activity-element.html) लेकिन लोगो लोड करने के लिए विधि मौजूद है और इसमें [Google के अपने उदाहरणों] में उपयोग किया गया है (http://code.google.com/p/styled-action-bar/source/browse/trunk/AndroidManifest.xml)। मैं परीक्षण करूंगा। –

+0

विधि फिन है, मैं मैनिफेस्ट के बारे में बात कर रहा हूं। मैं नीचे कुछ और पोस्ट करूंगा (टिप्पणी सीमाओं के कारण) – Aleadam

उत्तर

3

मेरे परीक्षणों से, आपका कोड हनीकॉम्ब डिवाइस पर ठीक से चल रहा है, लेकिन जिंजरब्रेड या नीचे डिवाइस पर नहीं। ऐसा लगता है कि android:logo कार्यक्षमता, हालांकि एपीआई स्तर 8 में मौजूद है, अंतर्निहित प्लेटफार्म में सही ढंग से लागू नहीं किया गया है।यही है, एक स्तर 8-10 डिवाइस पर एक ही एप्लीकेशन एपीके लोगो विशेषता को बनाए रखता नहीं है, लेकिन एक स्तर 11 डिवाइस करता है। इसका मतलब है कि समस्या कोड या AndroidManifest.xml के साथ नहीं है, लेकिन प्लेटफॉर्म के साथ है।

+0

मुझे चिंता थी कि यह कारण होगा। पिछली रात के आसपास आगे बढ़ने के बाद मैं अब सहमत हूं कि यह निश्चित रूप से ओएस के साथ एक मुद्दा है। काफी शर्म की बात है क्योंकि यह मेरी लाइब्रेरी में एक महान सुविधा सक्षम होगी। –

+2

FYI यह * किया जा सकता है यदि आप सीधे प्रकट होने के बाद पुल-पार्सर का उपयोग करते हैं। https://github.com/JakeWharton/ActionBarSherlock/blob/c1c187739a1b69340c325577f2f02c8a60dcd717/library/src/com/actionbarsherlock/internal/widget/ActionBarView.java#L267-348 –

1

आप android.app.ContextImpl.ApplicationPackageManager (here) में कोड पर एक नज़र डालें, तो आप उस मिलेगा अंततः इसे विधि (2.3 में 2173 के लिए लाइनों 2131)

public Drawable getDrawable(String packageName,int resid,ApplicationInfo appInfo) 

उपयोग करता है।

वहाँ कई Log.w कॉल वहाँ है कि आप (जैसे कि, Failure retrieving resources for ...)

0

पहले आप उस स्थापित कर रहे हैं सभी आवेदनों को खोजने की जरूरत है क्या एडीबी के माध्यम से चल रहा है पालन करने के लिए उपयोग कर सकते हैं। इस उद्देश्य के लिए हमें पैकेज प्रबंधक से निम्न विधियों, के लिए

public abstract List<PackageInfo> getInstalledPackages (int flags) 

more info here

तुम भी इंस्टॉल किए गए पैकेज के बारे में जानकारी प्राप्त करने के लिए निम्न विधि का उपयोग कर सकते हैं।

public abstract List<ApplicationInfo> getInstalledApplications (int flags) 

more info here

अब सूची प्राप्त करने के बाद, यह निम्न विधि का उपयोग कर पुनरावृति।

public Drawable getDrawable(String packageName,int resid,ApplicationInfo appInfo) 

more info here

प्रत्येक यात्रा आप पैकेज पूछे के संबंधित drawable दे देंगे। यहां res id आइकन की आईडी है ..

R.drawable.icon 
0

@ जेक व्हार्टन, आप कुछ ऐसी चीज को पुनः प्राप्त करने का प्रयास कर रहे हैं जो मौजूद नहीं है। applications के विपरीत, activities में एक अलग लोगो विशेषता नहीं है (एप्लिकेशन में परिभाषित लोगो सभी गतिविधियों के लिए डिफ़ॉल्ट विशेषता बन जाता है)। यही कारण है कि आप किसी गतिविधि से पुनर्प्राप्त करने में असमर्थ हैं।

+0

के लिए है, मैं एप्लिकेशन लोगो के लिए बसूंगा, सिवाय इसके कि मैं अपनी संसाधन आईडी या ड्रायबल प्राप्त करने में असमर्थ हूं। जैसा कि मैंने प्रश्न पर एक टिप्पणी में उल्लेख किया है, मुझे पता है कि मैनिफेस्ट स्कीमा 'लोगो' विशेषता सूचीबद्ध नहीं करता है, लेकिन [Google के अपने उदाहरण] (http://code.google.com/p/styled-action-bar/source /browse/trunk/AndroidManifest.xml#29) इसका उपयोग करें और यह एंड्रॉइड 3.0+ पर पूरी तरह से ठीक काम करता है। –

संबंधित मुद्दे