Android - आवेदन नाम कैसे प्राप्त करें? (पैकेज का नाम नहीं)


120

मेरे प्रकट में मेरे पास है:

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

मुझे लेबल तत्व कैसे मिलेगा?

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

जवाबों:


182

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

बस करो:

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बैकऑफ़ के रूप में किया जाता है। कोशिश / पकड़ में लपेटने के लिए कोई ज़रूरत नहीं है।


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

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

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

जैसा कि zenocon ने सलाह दी है, बेहतर है कि इसे अंदर डालें try ... catch
superarts.org

क्या आप nonLocalizableLabel की मुद्राओं के बारे में कुछ जानते हैं ?: "... आप शायद GetApplicationLabel (ApplicationInfo) चाहते हैं
डेविड

55

अगर AndroidManifest.xml में स्ट्रिंग्स.xml / हार्डकोड में उल्लेख नहीं किया गया है, तो एंड्रॉइड जैसे किसी भी कारण से: लेबल = "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");
}

या यदि आप String resource ID जानते हैं तो आप इसे सीधे प्राप्त कर सकते हैं

getString(R.string.appNameID);

string.xml से App Name पढ़ते समय, कभी-कभी, मुझे जंक कैरेक्टर मिलते हैं। मुझे नहीं पता क्यों ..Ex: à¤¸à ¥ & # 141; ठ& # 149; à ¥ & # 136; नठ°
हरिकृष्णन

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

3
loadLabel एक रिटर्न CharSequence। मुझे लगता है कि आपको .toString()अंत की आवश्यकता है ।
joshbodily

वापसी चारसालेंस या String.valueOf () है;
हेरिबेटो रिवेरा


15

यदि आप पैकेज का नाम जानते हैं तो निम्नलिखित स्निपेट का उपयोग करें

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

1
@RishabhTayal pm पैकेज मैनजर ऑब्जेक्ट को दर्शाता है।
विपुल शाह

@ विपुलशाह im हर बार अज्ञात हो रहा है
nida

6

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

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

6

में Kotlin , प्राप्त करने के लिए आवेदन का नाम निम्नलिखित कोड का उपयोग करें:

        // Get App Name
        var appName: String = ""
        val applicationInfo = this.getApplicationInfo()
        val stringId = applicationInfo.labelRes
        if (stringId == 0) {
            appName = applicationInfo.nonLocalizedLabel.toString()
        }
        else {
            appName = this.getString(stringId)
        }


2

चल रहे AppAppiction नाम का उपयोग कर चल रहा है:

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
  }
}

1

ठीक है दोस्तों एक और चिकना विकल्प है

Application.Context.ApplicationInfo.NonLocalizedLabel

आवेदन तत्व पर हार्ड कोडित Android लेबल के लिए सत्यापित।

<application android:label="Big App"></application>

संदर्भ: http://developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel


1

स्रोत टिप्पणी NonLocalizedLabelहमें अब प्रत्यक्ष करने के लिए जोड़ा गया:

return context.getPackageManager().getApplicationLabelFormatted(context.getApplicationInfo());

0

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

इसी तरह के एक सवाल का जवाब यहां देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.