当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现软件列表的点击启动另外一个程序功能【附demo源码下载】

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

神户丸,2015安徽中考成绩查询,朴槿惠支持率暴跌

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网