1.简介

Android Launcher ,也就是Android 的桌面应用程序。

Android Launcher 的功能主要包括有:显示并启动已安装的应用程序、显示桌面(动态)壁纸、显示系统小部件widget 等。

接下来就开始按照一个一个功能实现一个简单的Launcher 应用程序。


2.创建Launcher 应用

创建Android应用程序,修改Manifest 清单文件如下:

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                     

添加的内容:

                 

此时系统可以识别该应用程序为桌面应用程序。

运行程序时并没有特别,但是按下Home 键时会有提示如下:



3.列出已安装的应用程序

3.1修改 activity_main.xml 

添加一个GridView 用来显示应用程序列表,activity_main.xml 如下:

    

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


private List mApps;private GridView mGrid;

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

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

public class AppsAdapter extends BaseAdapter {        public AppsAdapter() {        }         public View getView(int position, View convertView, ViewGroup parent) {            ImageView i;              if (convertView == null) {                i = new ImageView(MainActivity.this);                i.setScaleType(ImageView.ScaleType.FIT_CENTER);                i.setLayoutParams(new GridView.LayoutParams(50, 50));            } else {                i = (ImageView) convertView;            }             ResolveInfo info = mApps.get(position);            i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));             return i;        }         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;        }}

3.4 监听GridView的onItemClick事件

设置一个监听器,当GridView 的某一个项被点击时,回调函数通知我们处理事件。

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);loadApps();        setContentView(R.layout.activity_main);        mGrid = (GridView) findViewById(R.id.apps_list);        mGrid.setAdapter(new AppsAdapter());        mGrid.setOnItemClickListener(listener);}private OnItemClickListener listener = new OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {            //事件处理        }    };


3.5 处理点击事件,启动该图标应用的主Activity

private OnItemClickListener listener = new OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {            ResolveInfo info = mApps.get(position);                        //该应用的包名            String pkg = info.activityInfo.packageName;            //应用的主activity类            String cls = info.activityInfo.name;                        ComponentName componet = new ComponentName(pkg, cls);                        Intent i = new Intent();            i.setComponent(componet);            startActivity(i);        }    };

整个MainActivity 的代码如下:

package com.andy.home;import java.util.List;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.pm.ResolveInfo;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;public class MainActivity extends Activity {private List mApps;private GridView mGrid;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);loadApps();        setContentView(R.layout.activity_main);        mGrid = (GridView) findViewById(R.id.apps_list);        mGrid.setAdapter(new AppsAdapter());        mGrid.setOnItemClickListener(listener);}private OnItemClickListener listener = new OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {            ResolveInfo info = mApps.get(position);                        //该应用的包名            String pkg = info.activityInfo.packageName;            //应用的主activity类            String cls = info.activityInfo.name;                        ComponentName componet = new ComponentName(pkg, cls);                        Intent i = new Intent();            i.setComponent(componet);            startActivity(i);        }    };private void loadApps() {        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);         mApps = getPackageManager().queryIntentActivities(mainIntent, 0);    }public class AppsAdapter extends BaseAdapter {        public AppsAdapter() {        }         public View getView(int position, View convertView, ViewGroup parent) {            ImageView i;              if (convertView == null) {                i = new ImageView(MainActivity.this);                i.setScaleType(ImageView.ScaleType.FIT_CENTER);                i.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));            } else {                i = (ImageView) convertView;            }             ResolveInfo info = mApps.get(position);            i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));             return i;        }         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;        }}}
运行效果如下图:



点击图标即可运行对应的应用程序。



显示widget 和桌面壁纸将在下一篇介绍。。。










更多相关文章

  1. Android(安卓)QQ皮肤制作 apk之间资源共享
  2. ( 转)关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
  3. Android应用程序四大组件
  4. Xamarin.Android使用教程之在Android和Xamarin Android(安卓)Vis
  5. 【Android】TextView 属性详解
  6. 用 Eclipse 开发 Android(安卓)应用程序
  7. [置顶] EditText属性大全
  8. Android(安卓)4.0 Launcher2源码分析——主布局文件
  9. android 应用 体会

随机推荐

  1. ContentProvider初步
  2. 在android中解析json
  3. 深拷贝和浅拷贝
  4. android之AudioManager详解_什么是AudioM
  5. Android控制ScrollView滚动
  6. ViewPage第三课自定义viewpage
  7. Android(安卓)- DownloadManager的使用
  8. Android(安卓)camera系统开发之IPC (五)
  9. Android通知栏技巧
  10. Android(安卓)NDK几点回调方式(device id