Android - Uygulama adı nasıl alınır? (Paket adı değil)


120

Manifestomda var:

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

Etiket öğesini nasıl edinebilirim?

Not: Kodum başka birinin içinde çalışıyor, bu nedenle @ string / app_name'ye erişimim yok

Yanıtlar:


182

Kaynağı açıkça adlandırmanızı veya paket adlarıyla istisnalar hakkında endişelenmenizi gerektirmeyen diğer yanıtlardan daha kolay bir yol var. Ayrıca, bir kaynak yerine doğrudan bir dize kullandıysanız da çalışır.

Sadece yap:

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

Bu yardımcı olur umarım.

Düzenle

Snicolas'tan gelen yorum ışığında, yukarıdakileri değiştirdim, böylece 0 ise kimliği çözmeyi denemeyecek. Bunun yerine, nonLocalizedLabelgeri çekilme olarak kullanıyor . Try / catch içinde sarmaya gerek yok.


3
Bu, içinde gerçekten bir etiket kullandığınız sürece iyi çalışır android:name. Bir dizeyi sabit kodladıysanız, başarısız olur.
Snicolas

2
Doğru ancak uygulama adı genellikle elbette bir dize kaynağı aracılığıyla belirtilir. Sabit telli bir ip tiftikle işaretlenir ve önerilmez.
darrenp

1
Dize bulunmazsa android.content.res.Resources $ NotFoundException'ı atacağına dikkat edin
zenocon

Zenocon'un önerdiği gibi, onu bir try ... catch.
superarts.org

NonLocalizableLabel dokümanı hakkında bir şeyler biliyor musunuz ?: "... Muhtemelen getApplicationLabel (ApplicationInfo)" istiyorsunuz
David

55

Android gibi herhangi bir nedenle strings.xml / AndroidManifest.xml'de kodlanmış olarak belirtilmemişse: label = "Uygulamam"

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");
}

Veya Dize kaynak kimliğini biliyorsanız, doğrudan şu adresten alabilirsiniz:

getString(R.string.appNameID);

string.xml'den Uygulama Adını okurken bazen gereksiz karakterler alıyorum. Neden bilmiyorum .. Ör: à¤¸à ¥ & # 141; ठ& # 149; à ¥ & # 136; नठ°
harikrishnan


25

Herhangi bir Bağlam kullanımından:

getApplicationInfo().loadLabel(getPackageManager()).toString();

15

Paket adını biliyorsanız, aşağıdaki parçacığı kullanın

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 PackageManager nesnesini belirtir.
Vipul Shah

@VipulShah her seferinde bilinmeyen
nida

6

Paket adına değil yalnızca uygulama adına ihtiyacınız varsa, bu kodu yazmanız yeterlidir.

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

6

In KOTLIN , Uygulama Adı almak için aşağıdaki kodları kullanın:

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

3

Kotlin'de çok basit:

val appLabel = context.applicationInfo.nonLocalizedLabel

2

RunningAppProcessInfo Kullanarak Uygulama Adını Alın:

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

Eklenen kaynak yorum NonLocalizedLabelbizi şimdi şuna yönlendiriyor:

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

0

PackageManager#getActivityInfo()Yöntemi kullanmayı denediniz mi? Uygulamanın adını içermesi gereken bir alan olacaktır.

Burada çok benzer bir sorunun cevabına bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.