1

これは、パッケージ名を使用してすべてのインストール アプリのリストを表示する私のソース コードですが、アプリ名を使用してすべてのアプリケーションをリストに表示したいと考えています。それ、どうやったら出来るの?「viber」や「whatsapp」などの名前のアプリケーションをリストビューで表示したいとします。以下は、提供するパッケージ名のアプリケーションのみを表示するコードですが、パッケージ名ではなく、提供する名前のアプリケーションのみを表示したいです。

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

    }
4

1 に答える 1