获取Launcher 启动列表
即 列出所有Launcher程序 通过PackageManager 来获取
[代码 步骤]
1. 定义内部类 LauncherItem 用于定义Application相关属性 比如:图标 名称 以及 ComponentName
public class LauncherItem { Drawable icon; String name; ComponentName component; LauncherItem(Drawable d, String s,ComponentName cn){ icon = d; name = s; component = cn; } };
2. 定义List<LauncherItem> lvalue 用于存放查询结果
public void addLauncher(){ lvalue = new ArrayList<LauncherItem>(); pkgMgt = this.getPackageManager(); //to query all launcher & load into List<> Intent it = new Intent(Intent.ACTION_MAIN); it.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> ra =pkgMgt.queryIntentActivities(it,0); for(int i=0;i<ra.size();i++){ ActivityInfo ai = ra.get(i).activityInfo; //String ainfo = ai.toString(); Drawable icon = ai.loadIcon(pkgMgt); String label = ai.loadLabel(pkgMgt).toString(); ComponentName c = new ComponentName(ai.applicationInfo.packageName,ai.name); LauncherItem item = new LauncherItem(icon,label,c); lvalue.add(item); } }
3. 定义LauncherAdapter 并指定各个item显示样式
public class LauncherAdapter extends BaseAdapter { Activity activity; public LauncherAdapter(Activity a){ activity = a; } @Override public int getCount() { // TODO Auto-generated method stub return lvalue.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub return composeItem(position); } public View composeItem(int position){ LinearLayout layout = new LinearLayout(activity); layout.setOrientation(LinearLayout.HORIZONTAL); ImageView iv = new ImageView(activity); iv.setImageDrawable(lvalue.get(position).icon); layout.addView(iv); TextView tv = new TextView(activity); tv.setText(lvalue.get(position).name); tv.setPadding(10, 5, 0, 0); layout.addView(tv); return layout; } }
4. 启动某个item 当单击时
adapter = new LauncherAdapter(this); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Intent intent =new Intent(Intent.ACTION_VIEW); intent.setComponent(lvalue.get(arg2).component); startActivity(intent); } });
5. emulator 结果结果
- 列出所有application
- 单击Alarm Clock 的情形:
有问题请跟帖 否则 请顶贴 谢谢!