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

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.


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


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

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

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();

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

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();

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

3

Di Kotlin sederhana:

val appLabel = context.applicationInfo.nonLocalizedLabel

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


1

Komentar sumber yang ditambahkan NonLocalizedLabelmengarahkan kita sekarang ke:

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

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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.