预备知识: GridView的使用 \ 改写BaseAdapter

列出已经安装的应用程序是作为launcher比不可少的功能。下面我们就讲解怎样将应用程序列出来。程序运行后的样子如下:



一. 修改main.xml,在其中添加一个GridView用来显示应用程序列表。
修改后如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:paddingBottom="@dimen/activity_vertical_margin"    tools:context=".MainActivity">    <GridView android:layout_width="match_parent"        android:id="@+id/apps_list"        android:numColumns="4"        android:layout_height="wrap_content">    </GridView></RelativeLayout>



二 . 通过PackageManager的api 查询已经安装的apk

我们写一个叫做loadApps的方法将活得的应用程序列表放到private List<ResolveInfo> mApps; 中,如下:

 private void loadApps() {        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);        new ImageView(MainActivity.this);        mApps = getPackageManager().queryIntentActivities(mainIntent, 0);    }



三. 实现用于显示Gridview的Adapter,使其显示获得的应用程序列表

直接上代码:
?
public class AppsAdapter extends BaseAdapter {        public AppsAdapter(){        }        @Override        public int getCount() {            return apps.size();        }        @Override        public Object getItem(int i) {            return apps.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            ImageView iv;            if(view == null){                iv = new ImageView(MainActivity.this);                iv.setScaleType(ImageView.ScaleType.FIT_CENTER);                iv.setLayoutParams(new GridView.LayoutParams(50, 50));            } else {                iv = (ImageView) view;            }            ResolveInfo info = apps.get(i);            iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));            return iv;        }    }


最后整个Activity的代码如下

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    private List<ResolveInfo> apps;    private void loadApps() {        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);        new ImageView(MainActivity.this);        apps = getPackageManager().queryIntentActivities(mainIntent, 0);    }    public class AppsAdapter extends BaseAdapter {        public AppsAdapter(){        }        @Override        public int getCount() {            return apps.size();        }        @Override        public Object getItem(int i) {            return apps.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            ImageView iv;            if(view == null){                iv = new ImageView(MainActivity.this);                iv.setScaleType(ImageView.ScaleType.FIT_CENTER);                iv.setLayoutParams(new GridView.LayoutParams(50, 50));            } else {                iv = (ImageView) view;            }            ResolveInfo info = apps.get(i);            iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));            return iv;        }    }}


android手把手教你开发launcher(一)(AndroidStudio版)

android手把手教你开发launcher(二)——列出安装的应用程序

android手把手教你开发launcher(三)——启动安装的应用程序

android手把手教你开发launcher(四)——显示widget

android手把手教你开发launcher(五)——设置壁纸



转自:http://www.bangchui.org/read.php?tid=11761

更多相关文章

  1. android 获取电话本中的联系人列表
  2. Android应用程序UI设计(1)_布局
  3. 40个Android面试题
  4. JRuby on Java ME/CDC
  5. Android(安卓)NDK开发入门篇 .
  6. 将keras或tensorflow模型迁移到android端(AndroidStudio)
  7. Android(安卓)framework浅析[转]
  8. Android书签列表
  9. 如何在android平台上实现语音识别

随机推荐

  1. Android出现Could not find ***.apk!错误
  2. Android音频实时传输与播放(三):AMR硬编码与
  3. android横屏竖屏
  4. 系出名门Android(8) - 控件(View)之TextS
  5. android:属性
  6. android 环境搭建helloworld
  7. Android(安卓)RelativeLayout 属性
  8. Android(安卓)SDK 快速安装方法
  9. 另一个更简单的Android应用程序全屏的方
  10. 修改ListView的分割线