Android Launcher 应用开发

1.简介

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

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

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


2.创建Launcher 应用

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




    

    
        
            
                
                
                                 
                
            
        
    

添加的内容:

                 

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

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

Android Launcher 应用开发_第1张图片

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 的某一个项被点击时,回调函数通知我们处理事件。

@Override
	protected 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;

	@Override
	protected 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;
        }
	}

}
运行效果如下图:

Android Launcher 应用开发_第2张图片

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



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










你可能感兴趣的:(Android)