অ্যান্ড্রয়েড - কিভাবে অ্যাপ্লিকেশন নাম পাবেন? (প্যাকেজের নাম নয়)


120

আমার প্রকাশ্যে আমি:

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

আমি কীভাবে লেবেল উপাদান পেতে পারি?

দ্রষ্টব্য: আমার কোডটি অন্য কারও ভিতরে চলছে, সুতরাং আমার কাছে @ স্ট্রিং / অ্যাপ_নামের অ্যাক্সেস নেই

উত্তর:


182

অন্যান্য উত্তরের তুলনায় একটি সহজ উপায় রয়েছে যার জন্য আপনার উত্সটির স্পষ্টরূপে নামকরণ বা প্যাকেজের নামগুলি ব্যতিক্রম সম্পর্কে চিন্তা করার দরকার নেই। আপনি যদি কোনও সংস্থার পরিবর্তে সরাসরি স্ট্রিং ব্যবহার করেন তবে এটিও কাজ করে।

শুধু কর:

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

আশাকরি এটা সাহায্য করবে.

সম্পাদন করা

স্নিকোলাসের মন্তব্যের আলোকে, আমি উপরেরটি সংশোধন করেছি যাতে এটি আইডি 0 হলে সমাধান করার চেষ্টা না করে 0 পরিবর্তে এটি nonLocalizedLabelব্যাকঅফ হিসাবে ব্যবহার করে । চেষ্টা / ধরা মোড়ানোর প্রয়োজন নেই।


3
এই কাজ করে জরিমানা, যতদিন আপনি সত্যিই মধ্যে একটি লেবেল ব্যবহার android:name। আপনি যদি একটি স্ট্রিং হার্ডকোড করে থাকেন তবে তা ব্যর্থ হয়।
স্নিকোলাস

2
সত্য তবে অ্যাপের নামটি অবশ্যই স্ট্রিং রিসোর্সের মাধ্যমে নির্দিষ্ট করা থাকে। একটি শক্ত তারের স্ট্রিংটি লিঙ্ক দ্বারা পতাকাঙ্কিত করা হয় এবং পরামর্শ দেওয়া হয় না।
darrenp

1
কেবল সতর্ক থাকুন যে এটি android.content.res.Resferences নিক্ষেপ করবে E স্ট্রিংটি পাওয়া না গেলে
ফাউন্ডেক্সপশন

জেনোকন দ্বারা পরামর্শ হিসাবে, ভাল এটি ভিতরে রাখুন try ... catch
superarts.org

ননলোক্যালাইজেবল লেবেলের নথি সম্পর্কে আপনি কি কিছু জানেন ?: "... আপনি সম্ভবত অ্যাপ্লিকেশন লেবেল (অ্যাপ্লিকেশনআইএনফো) চান"
ডেভিড

55

অ্যান্ড্রয়েডের মতো যে কোনও কারণে অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে স্ট্রিংস.এক্সএমএল / হার্ডকোডে উল্লেখ না থাকলে: লেবেল = "মাই অ্যাপ"

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

স্ট্রিং.এক্সএমএল থেকে অ্যাপের নাম পড়ার সময় কখনও কখনও জাঙ্ক চরিত্রগুলি পাওয়া যায়। আমি কেন জানি না ..Ex: à¤¸à ¥ & # 141; ठ& # 149; a ¥ & # 136; नठ°
harikrishnan

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

3
লোডবেল রিটার্ন দেয় a CharSequence। আমি মনে করি আপনার .toString()শেষের প্রয়োজন ।
joshbodily

প্রত্যাবর্তনটি CharSequence বা String.valueOf ();
Heriberto Rivera

25

যে কোনও প্রসঙ্গ ব্যবহার থেকে:

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

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
@ Habষভটিয়াল পিএমএল প্যাকেজম্যানেজার অবজেক্টটিকে বোঝায়।
বিপুল শাহ

@VipulShah তোমার দর্শন লগ করা অজানা প্রত্যেক সময় পেয়ে
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

রানিং অ্যাপপ্রসেসআইনফো ব্যবহার করে অ্যাপ্লিকেশন নাম পান:

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

অ্যাপ্লিকেশন উপাদানটিতে হার্ড কোডেড অ্যান্ড্রয়েড লেবেলের জন্য যাচাই করা হয়েছে।

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

উল্লেখ: http://developer.android.com/references/android/content/pm/PackageItemInfo.html#nonLocalizedLabel


1

উত্স মন্তব্য যোগ করার জন্য NonLocalizedLabelআমাদের এখন নির্দেশ দেয়:

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

0

আপনি কি PackageManager#getActivityInfo()পদ্ধতিটি ব্যবহার করার চেষ্টা করেছেন ? একটি ক্ষেত্র থাকবে যাতে অ্যাপ্লিকেশনটির নাম থাকা উচিত।

খুব অনুরূপ প্রশ্নের উত্তর এখানে দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.