отримати назву програми з назви пакета


84

Я хочу отримати назву програми з назви пакета програми. Хтось, будь ласка, покажіть мені, як я можу це отримати.

public class AppInstalledListener extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        String action = intent.getAction();
        if(action.equals("android.intent.action.PACKAGE_ADDED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
        if(action.equals("android.intent.action.PACKAGE_REMOVED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
        if(action.equals("android.intent.action.PACKAGE_REPLACED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
    }
}

Відповіді:


196

Ви можете використовувати PackageManagerклас, щоб отримати ApplicationInfo:

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

Це поверне ім’я програми, визначене в <application>тезі її маніфесту.


1
це ідеально. Шукав це годинами, дякую Сіон. : D
друлаби

3
його повернення мені невідоме весь час я alrady є ім'я пакета просто хочу знати ім'я з імені пакета
nida

Це не працює, коли я використовую це у глобальному приймачі
Ziv Kesten

Ви не можете отримати applicationInfo пакета після PACKAGE_REMOVED.
John61590

ідеальний .. просто скопіюйте вставку .. завершує роботу. Дякую.
ABHIMANGAL MS

37

Спробуйте це

final String packageName = "my.application.package"
PackageManager packageManager= getApplicationContext().getPackageManager();
String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA));

і замінити packageNameна повне ім’я вашого пакунку.

Ви можете отримати packageName, використовуючи mContext.getPackageName()where mContext = yourActivityName.thisдля Activity та getActivity () для фрагмента.


15
 public static String getAppNameFromPkgName(Context context, String Packagename) {
    try {
        PackageManager packageManager = context.getPackageManager();
        ApplicationInfo info = packageManager.getApplicationInfo(Packagename, PackageManager.GET_META_DATA);
        String appName = (String) packageManager.getApplicationLabel(info);
        return appName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return "";
    }
}

3

Здається, ви можете отримати подію нового пакета, доданого після цього, його дуже просту концепцію, щоб отримати всю відповідну інформацію про цей пакет, як одна така інформація - це назва програми, тому ось концепція

-> у вашому менеджері пакетів пристроїв є вся інформація, пов’язана з ним, тому просто зробіть об’єкт, який дасть вам всю інформацію, пов’язану з назвою пакета.

-> Ви також повинні пам'ятати, що намір дає вам "package: real_package_name", тому спочатку вам потрібно спочатку отримати справжнє ім'я шляхом розливу (я використовував) або за допомогою будь-якої іншої простої реалізації String

-> Ось код, сподіваюся, ви отримаєте те, що хочете. Я також даю інформацію про те, як ви можете отримати назву програми, піктограму програми, версію програми, код версії програми тощо .....

    public class NewAppReciver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("android.intent.action.PACKAGE_ADDED")){
    String[] a=intent.getData().toString().split(":");
    String packageName=a[a.length-1];

    List<PackageInfo> packageInfoList =          context.getPackageManager().getInstalledPackages(0);
    for (int i = 0; i < packageInfoList.size(); i++) {
        PackageInfo packageInfo = packageInfoList.get(i);
        if(packageInfo.packageName.equals(packageName)){
            String appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString();
            String appVersion = packageInfo.versionName;
            int appVerCode = packageInfo.versionCode;
            Drawable app_icon = packageInfo.applicationInfo.loadIcon(context.getPackageManager());
             }
         }
      }
   }    
}

Але під час видалення програми ви можете отримати лише ім'я пакета, оскільки при встановленні Un вся інша інформація видаляється системою.


intent.getData (). toString () - це не шлях, дані в намірі структуровані.
Олаф Ахтовен,

-2
PackageManager pm = getPackageManager();

IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");

Context context = getApplicationContext();
ComponentName component = new ComponentName(context.getPackageName(), TestReplaceHomeAppActivity.class.getName());

ComponentName[] components = new ComponentName[] {new ComponentName("com.android.launcher", "com.android.launcher.Launcher"), component};

pm.clearPackagePreferredActivities("com.android.launcher");
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.