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

 更新时间:2016年07月08日 10:49:38   作者:manymore13  
这篇文章主要介绍了Android实现软件列表的点击启动另外一个程序功能,涉及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程序设计有所帮助。

相关文章

  • Android图片缓存之初识Glide(三)

    Android图片缓存之初识Glide(三)

    这篇文章主要为大家详细介绍了Android图片缓存之Glide,学习比较优秀的图片缓存开源框架,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android开发双向滑动选择器范围SeekBar实现

    Android开发双向滑动选择器范围SeekBar实现

    这篇文章主要为大家介绍了Android开发双向滑动范围选择器SeekBar实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • flutter图片组件核心类源码解析

    flutter图片组件核心类源码解析

    这篇文章主要为大家介绍了flutter图片组件源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 简单好用的PHP分页类

    简单好用的PHP分页类

    这篇文章主要为大家分享了一款简单好用的PHP分页类page.class.php,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • 退出Android程序时清除所有activity的实现方法

    退出Android程序时清除所有activity的实现方法

    这篇文章主要介绍了退出Android程序时清除所有activity的实现方法,详细分析了Android退出时清除activity的原理与实现技巧,需要的朋友可以参考下
    2016-04-04
  • Android基于hover组件实现监控鼠标移动事件的方法

    Android基于hover组件实现监控鼠标移动事件的方法

    这篇文章主要介绍了Android基于hover组件实现监控鼠标移动事件的方法,结合实例形式分析了hover组件监控鼠标光标在view上变化的操作技巧,需要的朋友可以参考下
    2017-02-02
  • Android编程中Intent实现页面跳转功能详解

    Android编程中Intent实现页面跳转功能详解

    这篇文章主要介绍了Android编程中Intent实现页面跳转功能,结合实例形式分析了Android Intent实现页面跳转功能的具体步骤与相关注意事项,需要的朋友可以参考下
    2017-07-07
  • 详解如何在Flutter中使用媒体播放器

    详解如何在Flutter中使用媒体播放器

    现在的app功能越来越强大,除了基本的图文之外,还需要各种各样的其他的功能,比如视频,和直播,那么如何在flutter中使用媒体播放器呢?一起来看看吧
    2023-03-03
  • Android自定义View实现弹性小球效果

    Android自定义View实现弹性小球效果

    前段时间看到一个功能,是一个小球沿着固定轨迹弹动的效果,那么这篇文章小编给大家分享在Android中如何自定义View来实现弹性小球的效果,有需要的可以参考借鉴。
    2016-09-09
  • Android 限制edittext 整数和小数位数 过滤器(详解)

    Android 限制edittext 整数和小数位数 过滤器(详解)

    下面小编就为大家带来一篇Android 限制edittext 整数和小数位数 过滤器(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04

最新评论