欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现软件列表的点击启动另外一个程序功能【附demo源码下载】

程序员文章站 2024-03-31 17:53:52
本文实例讲述了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实现软件列表的点击启动另外一个程序功能【附demo源码下载】

更多关于android相关内容感兴趣的读者可查看本站专题:《android控件用法总结》、《android视图view技巧总结》、《android文件操作技巧汇总》、《android操作sqlite数据库技巧总结》、《android操作json格式数据技巧总结》、《android数据库操作技巧总结》、《android编程之activity操作技巧总结》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》及《android资源操作技巧汇总

希望本文所述对大家android程序设计有所帮助。