Android实现软件列表的点击启动另外一个程序功能【附demo源码下载】
程序员文章站
2024-03-05 10:35:48
本文实例讲述了android实现软件列表的点击启动另外一个程序功能。分享给大家供大家参考,具体如下:
目前面世的许多软件中有这么一个功能:设备中安装了哪些软件,他们会以一...
本文实例讲述了android实现软件列表的点击启动另外一个程序功能。分享给大家供大家参考,具体如下:
目前面世的许多软件中有这么一个功能:设备中安装了哪些软件,他们会以一个软件列表清单的形式向用户展示出来。
今天我们就来实现这一功能:
运行环境: motorola defy+ 系统2.3.6
主要 api : packageinfo,packagemanager,layoutinflater,applicationinfo
packagemanger类,它的主要职责是管理应用程序包。 通过它,我们就可以获取应用程序信息
通过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; } @override public int getcount() { return mapplist == null?0:mapplist.size(); } @override public object getitem(int arg0) { return mapplist == null?null:mapplist.get(arg0); } @override public long getitemid(int arg0) { return arg0; } @override public 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的点击操作,我这里是启动该应用程序 @override public 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程序设计有所帮助。