¿Cómo puedo obtener los iconos de las aplicaciones en una lista?
Frecuentes
Visto 8,521 veces
3
Estoy tratando de hacer una vista de lista con casillas de verificación para las aplicaciones instaladas en el teléfono Android. Puse los íconos en un ArrayList de la siguiente manera
packs = new ArrayList<String>(); // a list of all the packages
names = new ArrayList<String>(); // a list of all the apps names
icons = new ArrayList<Drawable>(); // a list of all apps drawable images
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
if ((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM) !=1){ // 'if' is to remove all system applications
packs.add((String) packageInfo.packageName);
names.add((String) packageManager.getApplicationLabel(packageInfo));
icons.add((Drawable) packageManager.getApplicationIcon(packageInfo));
Luego, para ponerlo en la vista de lista, uso esto.
icon = (ImageView) row.findViewById(R.id.appIcon);
icon.setImageDrawable(icons.get(position));
Sin embargo, fuerza el cierre y el problema está en icon.setImageDrawable(icons.get(position)); ¿Cómo puedo resolverlo?
1 Respuestas
17
Consulte mi solución para obtener la lista de íconos de la aplicación
En esta obteniendo la lista de ResolveInfo
de toda aplicación
Esta es la forma de obtener la lista de íconos de la aplicación en Android, espero que este ejemplo le sea útil.
importar java.util.List;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class IconListActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadApps();
}
private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
ListView listView = getListView();
listView.setAdapter(new AppsAdapter(this,mApps));
}
public class AppsAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<ResolveInfo> mApps;
public AppsAdapter(Context context, List<ResolveInfo> mApps) {
this.inflater = LayoutInflater.from(context);
this.mApps = mApps;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHendler hendler;
if (convertView == null) {
convertView = inflater.inflate(R.layout.row_view, null);
hendler = new ViewHendler();
hendler.textLable = (TextView)convertView.findViewById(R.id.textViewLable);
hendler.iconImage = (ImageView)convertView.findViewById(R.id.imageViewIcon);
convertView.setTag(hendler);
} else {
hendler = (ViewHendler)convertView.getTag();
}
ResolveInfo info = this.mApps.get(position);
hendler.iconImage.setImageDrawable(info.loadIcon(getPackageManager()));
hendler.textLable.setText(info.loadLabel(getPackageManager()));
return convertView;
}
class ViewHendler{
TextView textLable;
ImageView iconImage;
}
public final int getCount() {
return mApps.size();
}
public final Object getItem(int position) {
return mApps.get(position);
}
public final long getItemId(int position) {
return position;
}
}
}
contestado el 17 de mayo de 17 a las 11:05
@NoraHarb mira mi respuesta actualizada. Espero que funcione completamente para usted. - ashish dwivedi
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android listview icons imageview android-applicationinfo or haz tu propia pregunta.
Utiliza
adb logcat
, DDMS o la perspectiva de DDMS en Eclipse para examinar LogCat y ver el seguimiento de la pila asociado con su "cierre forzado". En particular, observe el nombre de la excepción que se generó. Si estás recibiendo unNullPointerException
en la línea que mencionó, intente limpiar su proyecto - Proyecto> Limpiar desde el menú principal de Eclipse, oant clean
para compilaciones de línea de comandos. - CommonsWareun poco tarde pero echa un vistazo a este es bueno androprogrammer.com/2013/10/… - buckau