2012-06-27 22 views
78

मेरी प्रकट में मेरे पास है:एंड्रॉयड: जाओ आवेदन का नाम (नाम पैकेज नहीं)

<application 
    android:name=".MyApp" 
    android:icon="@drawable/ic_launcher_icon" 
    android:label="@string/app_name" 
    android:debuggable="true"> 

मैं लेबल तत्व कैसे मिलता है? नोट: मेरा कोड किसी और के अंदर चल रहा है, इसलिए मेरे पास @ string/app_name तक पहुंच नहीं है।

उत्तर

9

क्या आप जानते हैं पैकेज का नाम तो टुकड़ा

ApplicationInfo ai; 
try { 
    ai = pm.getApplicationInfo(packageName, 0); 
} catch (final NameNotFoundException e) { 
    ai = null; 
} 
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)"); 
+0

क्या बजे यहाँ है? –

+1

@ ऋषभटायल अपराह्न PackageManager ऑब्जेक्ट को इंगित करता है। –

+0

@VipulShah मैं हर बार अज्ञात हो रहा हूं – nida

0

आप PackageManager#getActivityInfo() विधि का उपयोग करने की कोशिश की निम्नलिखित का उपयोग करते हैं? एक ऐसा क्षेत्र होगा जिसमें आवेदन का नाम होना चाहिए।

एक बहुत ही समान प्रश्न here का उत्तर देखें।

1

रूप RunningAppProcessInfo का उपयोग appliction नाम प्राप्त करें:

ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); 
List l = am.getRunningAppProcesses(); 
Iterator i = l.iterator(); 
PackageManager pm = this.getPackageManager(); 
while(i.hasNext()) { 
    ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); 
    try { 
    CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA)); 
    Log.w("LABEL", c.toString()); 
    }catch(Exception e) { 
    //Name Not FOund Exception 
    } 
} 
119

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

बस कार्य करें:

public static String getApplicationName(Context context) { 
    ApplicationInfo applicationInfo = context.getApplicationInfo(); 
    int stringId = applicationInfo.labelRes; 
    return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId); 
} 

आशा इस मदद करता है।

संपादित

Snicolas से टिप्पणी के प्रकाश में, मैं ऊपर इतना है कि यह आईडी को हल करने अगर यह 0. इसके बजाय यह का उपयोग करता है, nonLocalizedLabel एक backoff के रूप में है कोशिश नहीं करता संशोधित कर लिया है। कोशिश/पकड़ में लपेटने की कोई ज़रूरत नहीं है।

+3

यह ठीक काम करता है, जब तक आप वास्तव में 'android: name' में एक लेबल का उपयोग करते हैं। यदि आपने स्ट्रिंग को हार्डकोड किया है, तो यह विफल हो जाता है। – Snicolas

+2

सच है लेकिन ऐप नाम आमतौर पर पाठ्यक्रम के एक स्ट्रिंग संसाधन के माध्यम से निर्दिष्ट किया जाता है। एक हार्ड वायर्ड स्ट्रिंग को लिंट द्वारा ध्वजांकित किया जाता है और सलाह नहीं दी जाती है। – darrenp

+1

बस सावधान रहें कि यह android.content.res को फेंक देगा। स्रोत $ NotFoundException अगर स्ट्रिंग नहीं मिली है – zenocon

42

strings.xml/एंड्रॉयड की तरह जो भी कारण के लिए AndroidManifest.xml में hardcoded में उल्लेख नहीं है: लेबल = "MyApp"

public String getAppLable(Context context) { 
    PackageManager packageManager = context.getPackageManager(); 
    ApplicationInfo applicationInfo = null; 
    try { 
     applicationInfo = packageManager.getApplicationInfo(context.getApplicationInfo().packageName, 0); 
    } catch (final NameNotFoundException e) { 
    } 
    return (String) (applicationInfo != null ? packageManager.getApplicationLabel(applicationInfo) : "Unknown"); 
} 

या यदि आप स्ट्रिंग संसाधन आईडी तो पता है कि तुम सीधे कर सकते हैं के माध्यम से

getString(R.string.appNameID); 
+0

string.xml से ऐप नाम पढ़ने के दौरान, कभी-कभी, जंक वर्ण प्राप्त कर रहा हूं। मुझे नहीं पता क्यों ..Ex: à¤¸à ¥  ठ• à ¥ ˆ नठ° – harikrishnan

29
public static String getApplicationName(Context context) { 
    return context.getApplicationInfo().loadLabel(context.getPackageManager()); 
} 
+0

[loadLabel] (https://developer.android.com/reference/android/content/pm/PackageItemInfo .html # loadLabel (android.content.pm.PackageManager)) 'CharSequence' देता है। मुझे लगता है कि आपको अंत में '.toString()' की आवश्यकता है। – joshbodily

+0

वापसी CharSequence या String.valueOf() है; –

5

इसे पाने आप केवल आवेदन नाम, नहीं पैकेज का नाम की जरूरत है, तो बस इस कोड को लिखें।

String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString(); 
8

किसी भी प्रसंग उपयोग से:

getApplicationInfo().loadLabel(getPackageManager()).toString(); 
संबंधित मुद्दे