从程序包名称获取应用程序名称


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

Answers:


196

您可以使用PackageManagerclass获得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
那很完美。一直在找它好几个小时,谢谢Xion。:D
drulabs

3
它返回的我一直都是未知的,我一直拥有包名,只是想从包名中得知名字
奈达,2015年

当我在全球接收器中使用此功能时,此功能不起作用
Ziv Kesten 2015年

在PACKAGE_REMOVED之后,您将无法获得软件包的applicationInfo。
John61590 '18年

完美的..只需复制粘贴..就可以完成工作。谢谢。
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为您的包裹全名。

您可以使用where用于Activity并使用getActivity()作为片段来获取packageName mContext.getPackageName()mContext = yourActivityName.this


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

但是在卸载应用程序时,您只能获得软件包名称,因为在卸载时,系统会删除所有其他信息。


intent.getData()。toString()不是行之有效的,intent中的数据是结构化的。
奥拉夫·阿奇索芬

-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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.