[Android Studio] magcr23:
I'm trying to create a widget that will show the icon's of some app's installed on the device.

I manage to get a list of packages installed in the device, but i don't know how to get the icon from these.

I have this in my activity:

final static List<String> pacote_app = new ArrayList<String>();
final List<ApplicationInfo> apps = pm.getInstalledApplications(0);
for (ApplicationInfo app : apps) {
//checks for flags; if flagged, check if updated system app
if ((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
// installedApps.add(app);
//it's a system app, not interested
} else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
//Discard this one
//in this case, it should be a user-installed app
} else {
String pacote = (String) app.packageName; //NOME DOS PACOTES

pacote_app.add(pacote);
}
}

// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();

WidgetViewsFactory

import static com.example.magcr23.mywidget.LoremActivity.pacote_app;

public class WidgetViewsFactory implements RemoteViewsService.RemoteViewsFactory {

Context context;

private Context ctxt=null;
private int appWidgetId;

public WidgetViewsFactory(Context ctxt, Intent intent) {
this.ctxt=ctxt;
appWidgetId=intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}

@Override
public void onCreate() {}

@Override
public void onDestroy() {
// no-op
}

@Override
public int getCount() {
return(pacote_app.size());
}

@Override
public RemoteViews getViewAt(int position) {
RemoteViews row=new RemoteViews(ctxt.getPackageName(),
R.layout.list_item);

//FILL LIST
row.setTextViewText(android.R.id.text1, pacote_app.get(position));

//SEND WORD TO ACTIVITY
Intent i=new Intent();
Bundle extras=new Bundle();

extras.putString(WidgetProvider.EXTRA_WORD, pacote_app.get(position));
i.putExtras(extras);
row.setOnClickFillInIntent(android.R.id.text1, i);
//--------------
return(row);
}

@Override
public RemoteViews getLoadingView() {
return(null);
}

@Override
public int getViewTypeCount() {
return(1);
}

@Override
public long getItemId(int position) {
return(position);
}

@Override
public boolean hasStableIds() {
return(true);
}

@Override
public void onDataSetChanged() {
// no-op
}
}

WidgetProvider

public class WidgetProvider extends AppWidgetProvider{
public static String EXTRA_WORD=
"com.commonsware.android.appwidget.lorem.WORD";
@Override
public void onUpdate(Context ctxt, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for (int i=0; i<appWidgetIds.length; i++) {
Intent svcIntent=new Intent(ctxt, WidgetService.class);

svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));

RemoteViews widget=new RemoteViews(ctxt.getPackageName(),
R.layout.novo_widget);

widget.setRemoteAdapter(appWidgetIds[i], R.id.listagem,
svcIntent);

Intent clickIntent=new Intent(ctxt, LoremActivity.class);
PendingIntent clickPI=PendingIntent
.getActivity(ctxt, 0,
clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);

widget.setPendingIntentTemplate(R.id.listagem, clickPI);

appWidgetManager.updateAppWidget(appWidgetIds[i], widget);
}

super.onUpdate(ctxt, appWidgetManager, appWidgetIds);
}
}

WidgetService

public class WidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return(new WidgetViewsFactory(this.getApplicationContext(),
intent));
}

Layout

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/widget_margin"
android:orientation="horizontal">

<ListView
android:id="@+id/listagem"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />

</LinearLayout>

ListView Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:minHeight="?android:attr/listPreferredItemHeight"
android:textColor="#000"
/>

</LinearLayout>