本文实例讲述了Android实现软件列表的点击启动另外一个程序功能。分享给大家供大家参考,具体如下:
目前面世的许多软件中有这么一个功能:设备中安装了哪些软件,他们会以一个软件列表清单的形式向用户展示出来。
今天我们就来实现这一功能:
运行环境: motorola defy+ 系统2.3.6
主要 API : PackageInfo,PackageManager,LayoutInflater,ApplicationInfoPackageManger类,它的主要职责是管理应用程序包。 通过它,我们就可以获取应用程序信息
通过PackageManager获取应用程序相关信息,再通过listView显示出相应信息。
直接上主要代码了
public class AppListView extends LinearLayout implements OnItemClickListener{private final static String TAG = "AppListView";private ListView mListView;private TextView mTvTitle;private List<AppInfo> mAppList;private Context mContext;private LayoutInflater mInflater;private PackageManager mPacManager;public AppListView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}public AppListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init(context);}public AppListView(Context context){super(context);init(context);}private void init(Context c){mContext = c;mInflater = (LayoutInflater)c.getSystemService (Context.LAYOUT_INFLATER_SERVICE);this.addView(mInflater.inflate(R.layout.activity_main,null,false));mListView = (ListView)this.findViewById(R.id.listView);mTvTitle= (TextView)this.findViewById(R.id.title);loadAppData();mListView.setAdapter(new MyAdapter(c));mListView.setOnItemClickListener(this);Log.d(TAG, "一共"+mAppList.size());}// 加载应用软件数据 软件名称,包名,对应的图标等等private void loadAppData(){if(mAppList != null){mAppList.clear();}else{mAppList = new ArrayList<AppInfo>();}mPacManager = mContext.getPackageManager();List<PackageInfo> packages = mPacManager.getInstalledPackages(0);for(int i=0; i<packages.size(); i++){PackageInfo pi = packages.get(i);AppInfo ai = new AppInfo();ai.packageName = pi.packageName;ai.appName = pi.applicationInfo.loadLabel(mPacManager).toString();ai.appIcon = pi.applicationInfo.loadIcon(mPacManager);mAppList.add(ai);}mTvTitle.setText("本机所安装的软件总数:"+packages.size()+"个");}// 为ListView自定义适配器class MyAdapter extends BaseAdapter{public MyAdapter(Context c){mContext = c;}@Overridepublic int getCount() {return mAppList == null?0:mAppList.size();}@Overridepublic Object getItem(int arg0) {return mAppList == null?null:mAppList.get(arg0);}@Overridepublic long getItemId(int arg0) {return arg0;}@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {View view;if(arg1 == null){view = mInflater.inflate(R.layout.app_list_item, null);}else{view = arg1;}AppInfo ai = (AppInfo)getItem(arg0);ImageView appIcon= (ImageView)view.findViewById(R.id.appIcon);TextView appName= (TextView)view.findViewById(R.id.appName);TextView appPackage = (TextView)view.findViewById(R.id.appPackage);appIcon.setImageDrawable(ai.appIcon);appName.setText(ai.appName);appPackage.setText(ai.packageName);return view;}}// 处理ListView的item的点击操作,我这里是启动该应用程序@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {Toast.makeText(mContext, arg2+"", Toast.LENGTH_SHORT).show();// 获取本次item的包名String packName = mAppList.get(arg2).packageName;// 启动此程序Intent intent = mPacManager.getLaunchIntentForPackage(packName);mContext.startActivity(intent);}// 软件载体public class AppInfo {// 软件名称public String appName="";// 软件包名public String packageName="";// 软件图标public Drawable appIcon=null;}}public abstract Intent getLaunchIntentForPackage (String packageName)这个方法通过包名返回一个Intent , 然后通过StartActivity(Intent)启动应用程序
完整实例代码点击此处本站下载。下面是程序运行的效果图:

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android视图View技巧总结》、《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》及《Android资源操作技巧汇总》
希望本文所述对大家Android程序设计有所帮助。