Android(安卓)Launcher 应用开发
16lz
2021-12-04
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) { //事件处理 } };
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 和桌面壁纸将在下一篇介绍。。。
更多相关文章
- Android(安卓)QQ皮肤制作 apk之间资源共享
- ( 转)关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
- Android应用程序四大组件
- Xamarin.Android使用教程之在Android和Xamarin Android(安卓)Vis
- 【Android】TextView 属性详解
- 用 Eclipse 开发 Android(安卓)应用程序
- [置顶] EditText属性大全
- Android(安卓)4.0 Launcher2源码分析——主布局文件
- android 应用 体会