Здравствуйте, мне нужно показать все приложения на устройстве в виде списка, теперь он показывает приложения, но не все из них. Я не знаю почему, приложения Google, такие как youtube, chrome, google play, похоже, не отображаютсяСейчас я запускаю приложение на эмуляторе.Вот мой код:
private List<ApplicationInfo> appList = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
final ListView myInstalledApp = (ListView) findViewById(R.id.installed_app_list);
final List<settings.AppList> installedApps = getAllInstalledApps();
final settings.AppAdapter installedAppAdapter = new settings.AppAdapter(settings.this, installedApps);
myInstalledApp.setAdapter(installedAppAdapter);
}
private List<AppList> getAllInstalledApps() {
List<AppList> List = new ArrayList<AppList>();
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
for (int i = 0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
if ((isSystemPackage(p) == false)) {
String appName = p.applicationInfo.loadLabel(getPackageManager()).toString();
Drawable icon = p.applicationInfo.loadIcon(getPackageManager());
List.add(new AppList(appName, icon));
}
}
return List;
}
private boolean isSystemPackage(PackageInfo pInfo) {
return ((pInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true : false;
}
public class AppAdapter extends BaseAdapter {
private LayoutInflater layoutInflater;
private List<AppList> appInList;
public AppAdapter(Context context, List<AppList> customizedListView) {
layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
appInList = customizedListView;
}
@Override
public int getCount() {
return appInList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder listViewHolder;
if(convertView == null){
listViewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.app_item_layout, parent, false);
listViewHolder.appNameText = (TextView)convertView.findViewById(R.id.list_app_name);
listViewHolder.appIcon = (ImageView)convertView.findViewById(R.id.app_icon);
convertView.setTag(listViewHolder);
}
else{
listViewHolder = (ViewHolder)convertView.getTag();
}
listViewHolder.appNameText.setText(appInList.get(position).getName());
listViewHolder.appIcon.setImageDrawable(appInList.get(position).getIcon());
return convertView;
}
}
static class ViewHolder{
TextView appNameText;
ImageView appIcon;
}
public class AppList {
private String name;
Drawable icon;
public AppList(String name, Drawable icon) {
this.name = name;
this.icon = icon;
}
public String getName() {
return name;
}
public Drawable getIcon() {
return icon;
}
}
и вот изображение того, что приложение показывает мне только мои тестовые приложения и некоторый пакет.
показанные приложения