【问题标题】:get application name from package name从包名中获取应用程序名
【发布时间】:2018-01-19 18:50:10
【问题描述】:

我想从应用程序包名称中获取应用程序名称。有人请告诉我如何获得这个。

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

【问题讨论】:

    标签: android


    【解决方案1】:

    可以使用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> 标记中定义的应用程序名称。

    【讨论】:

    • 那是完美的。找了好几个小时,谢谢Xion。 :D
    • 它返回我一直未知我一直有包名只是想从包名中知道名称
    • 当我在全局接收器中使用它时这不起作用
    • 在 PACKAGE_REMOVED 之后无法获取包的 applicationInfo。
    • 完美的一个..只需复制粘贴..即可完成工作。谢谢。
    【解决方案2】:

    试试这个

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

    并将packageName 替换为您的包全名。

    您可以使用mContext.getPackageName() 获取packageName,其中mContext = yourActivityName.this 用于Activity,getActivity() 用于片段。

    【讨论】:

      【解决方案3】:
       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 "";
          }
      }
      

      【讨论】:

        【解决方案4】:

        您似乎能够收到添加新包的事件,这是一个非常简单的概念,可以获取有关该包的所有相关信息,例如应用程序名称就是这样的信息,所以这里是概念

        ->您的设备包管理器拥有与之相关的所有信息,因此只需创建一个对象,它将为您提供与包名称相关的所有信息。

        -> 您还应该记住,意图给您“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中的数据是结构化的。
        【解决方案5】:
        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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-19
          • 2012-04-06
          • 1970-01-01
          • 1970-01-01
          • 2011-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多