Android - Bagaimana cara mendapatkan nama aplikasi? (Bukan nama paket)

120

Dalam manifes saya, saya memiliki:

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

Bagaimana cara mendapatkan elemen label?

Catatan: Kode saya berjalan di dalam kode orang lain, jadi saya tidak memiliki akses ke @ string / app_name

AndroidDev
sumber

Jawaban:

182

Ada cara yang lebih mudah daripada jawaban lain yang tidak mengharuskan Anda menamai sumber daya secara eksplisit atau mengkhawatirkan pengecualian dengan nama paket. Ini juga berfungsi jika Anda telah menggunakan string secara langsung, bukan sumber daya.

Kerjakan saja:

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

Semoga ini membantu.

Sunting

Mengingat komentar dari Snicolas, saya telah memodifikasi yang di atas sehingga tidak mencoba untuk menyelesaikan id jika itu 0. Sebagai gantinya digunakan, nonLocalizedLabelsebagai backoff. Tidak perlu membungkus dalam coba / tangkap.

sayang
sumber
3
Ini berfungsi dengan baik, selama Anda benar-benar menggunakan label di android:name. Jika Anda melakukan hardcode string, maka gagal.
Snicolas
2
Benar, tetapi nama aplikasi biasanya ditentukan melalui sumber daya string tentunya. String terprogram ditandai oleh lint dan tidak disarankan.
darrenp
1
Berhati-
Seperti yang disarankan oleh zenocon, lebih baik taruh di dalam a try ... catch.
superarts.org
Apakah Anda tahu sesuatu tentang dokumen nonLocalizableLabel ?: "... Anda mungkin ingin getApplicationLabel (ApplicationInfo)"
David
55

Jika tidak disebutkan dalam strings.xml / hardcoded di AndroidManifest.xml karena alasan apa pun seperti android: label = "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");
}

Atau jika Anda mengetahui ID sumber daya String maka Anda bisa langsung mendapatkannya melalui

getString(R.string.appNameID);
Vinayak Bevinakatti
sumber
saat membaca Nama Aplikasi dari string.xml, terkadang, saya mendapatkan karakter sampah. Saya tidak tahu mengapa .. Contoh: à¤¸à ¥ & # 141; ठ& # 149; à ¥ & # 136; नठ°
harikrishnan
37
public static String getApplicationName(Context context) {
    return context.getApplicationInfo().loadLabel(context.getPackageManager());
}
Heath Borders
sumber
3
loadLabel mengembalikan a CharSequence. Saya pikir Anda perlu .toString()di akhir.
joshbodily
return adalah CharSequence atau String.valueOf ();
Heriberto Rivera
25

Dari penggunaan Konteks apa pun:

getApplicationInfo().loadLabel(getPackageManager()).toString();
zaman
sumber
15

Jika Anda tahu nama Paket, gunakan cuplikan berikut

ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo(packageName, 0);
} catch (final NameNotFoundException e) {
    ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
Vipul Shah
sumber
1
@RishabhTayal pm menunjukkan objek PackageManager.
Vipul Shah
@VipulShah im semakin tidak dikenal setiap waktu
nida
6

Jika Anda hanya membutuhkan nama aplikasi, bukan nama paketnya, maka tulis saja kode ini.

 String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
Pir Fahim Shah
sumber
6

Di Kotlin , gunakan kode berikut untuk mendapatkan Nama Aplikasi:

        // 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)
        }
Jerry Chong
sumber
3

Di Kotlin sederhana:

val appLabel = context.applicationInfo.nonLocalizedLabel
Asaf Pinhassi
sumber
2

Dapatkan Nama Aplikasi Menggunakan RunningAppProcessInfo sebagai:

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
  }
}
ρяσѕρєя K
sumber
1

Komentar sumber yang ditambahkan NonLocalizedLabelmengarahkan kita sekarang ke:

return context.getPackageManager().getApplicationLabelFormatted(context.getApplicationInfo());
Gábor
sumber
0

Sudahkah Anda mencoba menggunakan PackageManager#getActivityInfo()metode ini? Akan ada bidang yang harus berisi nama aplikasi.

Lihat jawaban untuk pertanyaan yang sangat mirip di sini .

gkiar
sumber