您的位置:首页 > 移动开发 > Android开发

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

2014-02-21 16:33 489 查看
预备知识: GridView的使用 \ 改写BaseAdapter 

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


一. 修改main.xml,在其中添加一个GridView用来显示应用程序列表。
修改后如下:

[html] view
plaincopyprint?

<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; 中,如下:

[java] view
plaincopyprint?

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,使其显示获得的应用程序列表

直接上代码:

?

[java] view
plaincopyprint?

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的代码如下

[java] view
plaincopyprint?

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: