我如何获取列表ofinstall应用程序名称 [英] how do i get list ofinstall apps name

查看:164
本文介绍了我如何获取列表ofinstall应用程序名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的源$ C ​​$ C可显示所有安装使用包名的应用程序列表,但我想说明使用的应用程序名称列表中的所有应用程序。我怎么做?假设我想以显示包含Viber的或WhatsApp的名称列表视图的应用程序。
下面是我的code其中只显示包名我公司提供的应用程序,但我想只显示我提供这名的应用程序,而不是包名。

  @覆盖
   公共无效的onCreate(捆绑savedInstanceState){
      super.onCreate(savedInstanceState);
      的setContentView(R.layout.activity_main);      mAppsList =(ListView控件)findViewById(R.id.appslist);
      mAppsList.setOnItemClickListener(本);      MAPPS = loadInstalledApps(INCLUDE_SYSTEM_APPS);      mAdapter =新AppListAdapter(getApplicationContext());
      mAdapter.setListItems(MAPPS);
      mAppsList.setAdapter(mAdapter);      新LoadIconsTask()执行(mApps.toArray(新的App [] {}));
   }   @覆盖
   公共无效onItemClick(适配器视图<>母公司,观景,INT位置,长
  ID) {      最终的应用程序=(APP)parent.getItemAtPosition(位置);      AlertDialog.Builder建设者=新AlertDialog.Builder(本);      弦乐味精= app.getTitle()+\\ n \\ n+
         版本+ app.getVersionName()+(+
         app.getVersion code()+)+
         (!?app.getDescription()=空(\\ n \\ n+ app.getDescription()):);      builder.setMessage(MSG)
      .setCancelable(真)
      .setTitle(app.getTitle())
      .setIcon(mAdapter.getIcons()获得(app.getPackageName()))
      .setPositiveButton(启动,新DialogInterface.OnClickListener(){
         公共无效的onClick(DialogInterface对话,诠释的id){
            //通过调用其推出的意图启动应用程序
            意向I =
   。getPackageManager()getLaunchIntentForPackage(app.getPackageName());
            尝试{
               如果(我!= NULL){
                  startActivity(ⅰ);
               }其他{
                  I =新意图(app.getPackageName());
                  startActivity(ⅰ);
               }
            }赶上(ActivityNotFoundException ERR){
               Toast.makeText(MainActivity.this,错误启动程序,Toast.LENGTH_SHORT).show();
            }
         }
      })
      .setNegativeButton(取消,新DialogInterface.OnClickListener(){
         公共无效的onClick(DialogInterface对话,诠释的id){
            dialog.cancel();
         }
      });
      AlertDialog对话框= builder.create();
      dialog.show();
   }   / **
    *使用包管理器来查询所有已安装的应用程序这是   投入豆类和返回
    *以列表的形式。
    *
    * @参数includeSysApps是否包括系统应用
    返回:包含{@ code应用}豆每个安装的应用程序列表
    * /
   私人列表<应用> loadInstalledApps(布尔includeSysApps){
          清单<应用>应用=新的ArrayList<应用>();          //包管理器包含所有已安装的信息
     应用
          软件包管理系统软件包管理系统= getPackageManager();          清单< PackageInfo>包= packageManager.getInstalledPackages(0);
    //PackageManager.GET_META_DATA          的for(int i = 0; I< packs.size();我++){
             PackageInfo p值= packs.get(ⅰ);
           如果(((p.packageName).equals(com.gfsmart.filemanager))||
       ((p.packageName).equals(com.mypackage))||
  ((p.packageName).equals(com.doodlejoy.studio.kidsdoojoy))||
  ((p.packageName).equals(com.fullfat.android.agentdash))){
    //如果((p.applicationInfo).equals(com.mypackage)){             应用程序=新的App();    app.setTitle(p.applicationInfo.loadLabel(软件包管理系统)的ToString());
             app.setPackageName(p.packageName);
             app.setVersionName(p.versionName);
             app.setVersion code(p.version code);
             CharSequence的说明=
     p.applicationInfo.loadDescription(软件包管理系统);
             app.setDescription(说明​​= NULL description.toString()!?
    );
             apps.add(应用);
          }
          }
          返回应用程序;
       }       / **
        *异步任务加载安装的应用程序的图标。
        * /
       私有类LoadIconsTask扩展的AsyncTask<应用程序,太虚,太虚> {
          @覆盖
          保护无效doInBackground(应用程序...应用){             地图<弦乐,可绘制>图标=新的HashMap<弦乐,可绘制>();
             软件包管理系统经理=
    。getApplicationContext()getPackageManager();             对于程序(App应用:应用){
                字符串PKGNAME = app.getPackageName();
                可绘制ICO = NULL;
                尝试{
                   意向I = manager.getLaunchIntentForPackage(PKGNAME);
                   如果(我!= NULL){
                      ICO = manager.getActivityIcon(ⅰ);
                   }
                }赶上(ē的NameNotFoundException){
                   Log.e(ERROR,无法找到包'图标+
   PKGNAME +':+ e.getMessage());
                }
                icons.put(app.getPackageName(),ICO);
             }
             mAdapter.setIcons(图标);             返回null;
          }          @覆盖
          保护无效onPostExecute(虚空结果){
             mAdapter.notifyDataSetChanged();
          }
      }    }


解决方案

 最后的软件包管理系统PM = getPackageManager();
//获取安装的应用程序列表。
清单< ApplicationInfo>包= pm.getInstalledApplications(PackageManager.GET_META_DATA);

然后将它们添加到ListArray<字符串>使用for循环

 为(ApplicationInfo packageInfo:包)
    myList.Add(packageInfo.packageName);

然后添加整个ListArray<字符串>到ListView

  ListAdapter LA =新ArrayAdapter<串GT;(这一点,R.layout.simplerow,
 AppNames);
 myListView.setAdapter(LA);

而在onItemClickListener你可以使用获得意图

  packages.get(ClickedRowNumber).packageName;

好运气

This is my source code which displays a list of all install apps using package name, but I want to show all application in list using apps name. How do i do that? Suppose I want to display application in list view with name like "viber" or "whatsapp". Below is my code which displays only the application which package name I provide, but I want to show only those applications which names I provide, not package name.

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      mAppsList = (ListView) findViewById(R.id.appslist);
      mAppsList.setOnItemClickListener(this);

      mApps = loadInstalledApps(INCLUDE_SYSTEM_APPS);

      mAdapter = new AppListAdapter(getApplicationContext());
      mAdapter.setListItems(mApps);
      mAppsList.setAdapter(mAdapter);

      new LoadIconsTask().execute(mApps.toArray(new App[]{}));
   }

   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long 
  id) {

      final App app = (App) parent.getItemAtPosition(position);

      AlertDialog.Builder builder = new AlertDialog.Builder(this);

      String msg = app.getTitle() + "\n\n" + 
         "Version " + app.getVersionName() + " (" +
         app.getVersionCode() + ")" +
         (app.getDescription() != null ? ("\n\n" + app.getDescription()) : "");

      builder.setMessage(msg)
      .setCancelable(true)
      .setTitle(app.getTitle())
      .setIcon(mAdapter.getIcons().get(app.getPackageName()))
      .setPositiveButton("Launch", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int id) {
            // start the app by invoking its launch intent
            Intent i = 
   getPackageManager().getLaunchIntentForPackage(app.getPackageName());
            try {
               if (i != null) {
                  startActivity(i);
               } else {
                  i = new Intent(app.getPackageName());
                  startActivity(i);
               }
            } catch (ActivityNotFoundException err) {
               Toast.makeText(MainActivity.this, "Error launching app", Toast.LENGTH_SHORT).show();
            }
         }
      })
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
         }
      });
      AlertDialog dialog = builder.create();
      dialog.show();
   }

   /**
    * Uses the package manager to query for all currently installed apps which are 

   put into beans and returned
    * in form of a list.
    * 
    * @param includeSysApps whether or not to include system applications
    * @return a list containing an {@code App} bean for each installed application 
    */
   private List<App> loadInstalledApps(boolean includeSysApps) {
          List<App> apps = new ArrayList<App>();

          // the package manager contains the information about all installed 
     apps
          PackageManager packageManager = getPackageManager();

          List<PackageInfo> packs = packageManager.getInstalledPackages(0); 
    //PackageManager.GET_META_DATA 





          for(int i=0; i < packs.size(); i++) {
             PackageInfo p = packs.get(i);


           if ( ((p.packageName).equals("com.gfsmart.filemanager")) || 
       ((p.packageName).equals("com.mypackage")) || 
  ((p.packageName).equals("com.doodlejoy.studio.kidsdoojoy")) || 
  ((p.packageName).equals("com.fullfat.android.agentdash"))) {
    //           if ( (p.applicationInfo).equals("com.mypackage")) {

             App app = new App();

    app.setTitle(p.applicationInfo.loadLabel(packageManager).toString());
             app.setPackageName(p.packageName);
             app.setVersionName(p.versionName);
             app.setVersionCode(p.versionCode);
             CharSequence description = 
     p.applicationInfo.loadDescription(packageManager);
             app.setDescription(description != null ? description.toString() : 
    "");
             apps.add(app);
          }
          }
          return apps;
       }

       /**
        * An asynchronous task to load the icons of the installed applications.
        */
       private class LoadIconsTask extends AsyncTask<App, Void, Void> {
          @Override
          protected Void doInBackground(App... apps) {

             Map<String, Drawable> icons = new HashMap<String, Drawable>();
             PackageManager manager = 
    getApplicationContext().getPackageManager();

             for (App app : apps) {
                String pkgName = app.getPackageName();
                Drawable ico = null;
                try {
                   Intent i = manager.getLaunchIntentForPackage(pkgName);
                   if (i != null) {
                      ico = manager.getActivityIcon(i);
                   }
                } catch (NameNotFoundException e) {
                   Log.e("ERROR", "Unable to find icon for package '" +  
   pkgName + "': " + e.getMessage());
                }
                icons.put(app.getPackageName(), ico);
             }
             mAdapter.setIcons(icons);

             return null;
          }

          @Override
          protected void onPostExecute(Void result) {
             mAdapter.notifyDataSetChanged();
          }
      }

    }

解决方案

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

Then Add them to a ListArray < String> using this for loop

for (ApplicationInfo packageInfo : packages) 
    myList.Add(packageInfo.packageName);

Then Add the whole ListArray < String> to a listview

 ListAdapter la = new ArrayAdapter<String>(this, R.layout.simplerow,
 AppNames);
 myListView.setAdapter(la);

And in the onItemClickListener you can get the Intent using

packages.get(ClickedRowNumber).packageName;

good Luck

这篇关于我如何获取列表ofinstall应用程序名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆