相信大家手机中都有应用管理器,很多第三方软件也是应用管理,但是感觉他们做的功能太多,附加内容太多,不是那种简洁的应用,于是自己就在网上看了看一些人做的,结合自己的思想,做了一个自己喜欢的那种简洁的应用管理器,非常的使用。我先介绍一下这个应用管理器,主要有哪些功能吧!

功能主要分为四块:运行、分享、加锁、卸载。点击标题栏可以切换所有应用和用户应用,非常的简洁实用,当然了实现起来也不是很难。下面我们就先看看运行的效果图吧:

主界面                                                                               第一次加锁设置密码

                              

手机运行加锁程序时验证密码                                                 解除应用加锁

                             

上面就是系统最后的效果,由于实现起来步骤也不少,我们接下来将一步步的去实现,今天我们的任务就是实现将手机里面的所有应用程序取出来,放到列表并显示出来。

下面先看一下项目的目录结构:

一、我们先说一下布局文件:

主界面布局文件main_layout.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" android:background="@drawable/logo"><LinearLayoutandroid:id="@+id/ll_app_logo"android:layout_width="fill_parent"android:layout_height="50dp"android:gravity="center_vertical|center_horizontal"android:background="@drawable/blue_btn"android:orientation="vertical"><TextViewandroid:id="@+id/tv_app_title" android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@android:color/white"android:textSize="22sp"android:text="@string/app_list_lago"android:focusable="false"/></LinearLayout><FrameLayout android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/list_back"><ListView android:id="@+id/lv_app_manager"android:layout_width="match_parent"android:layout_height="match_parent"android:cacheColorHint="@android:color/transparent"android:layout_marginTop="10dip" /><LinearLayout android:id="@+id/ll_app_manager_progress"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_vertical|center_horizontal"android:orientation="vertical"android:visibility="gone"android:background="@drawable/logo"><ProgressBar android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/app_list_loading"android:textSize="18sp"android:textColor="#ffbc04e5"/></LinearLayout></FrameLayout></LinearLayout>

建一个布局文件用于保存应用程序的信息,最后在列表中显示app_manager_item.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"android:gravity="center_vertical" ><!-- android:scaleType="fitXY"把图片按照指定的大小在View中显示,拉伸显示图片,不保持原比例,填满View. --><ImageView android:id="@+id/iv_app_manager_icon"android:layout_width="60dip"android:layout_height="60dip"android:scaleType="fitXY"android:contentDescription="HELLO"/><TextView android:id="@+id/tv_app_manager_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dip"android:textSize="21sp"android:textColor="#ff000000"/><ImageView   android:id="@+id/iv_app_lock"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_marginLeft="10dip"  android:scaleType="fitXY"  android:src="@drawable/unlock"  android:contentDescription="@string/hello_world"/>
</LinearLayout>

二、下面我们就要写java文件,来处理并显示出来效果:

先建一个AppInfo类,代码如下:

package com.xh.ui;import android.graphics.drawable.Drawable;
/*** 类名称:AppInfo * 类描述:应用程序类,包括了程序相关属性* 创建人:LXH * 创建时间:创建时间:2013-11-5 下午3:31:00 */
public class AppInfo {private Drawable icon;private String appName;private String packageName;private boolean isSystemApp;private long codesize;public long getCodesize() {return codesize;}public void setCodesize(long codesize) {this.codesize = codesize;}public Drawable getIcon() {return icon;}public void setIcon(Drawable icon) {this.icon = icon;}public String getAppName() {return appName;}public void setAppName(String appName) {this.appName = appName;}public String getPackageName() {return packageName;}public void setPackageName(String packageName) {this.packageName = packageName;}public boolean isSystemApp() {return isSystemApp;}public void setSystemApp(boolean isSystemApp) {this.isSystemApp = isSystemApp;}}

建一个获取应用程序信息的AppInfoProvider类,代码如下:

package com.xh.ui;import java.util.ArrayList;
import java.util.List;import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
/*** 类名称:AppInfoProvider * 类描述:获取应用程序的相关信息* 创建人:LXH * 创建时间:创建时间:2013-11-5 下午3:31:00 */
public class AppInfoProvider {private PackageManager packageManager;//获取一个包管理器public AppInfoProvider(Context context){packageManager = context.getPackageManager();}/***获取系统中所有应用信息,*并将应用软件信息保存到list列表中。**/ public List<AppInfo> getAllApps(){List<AppInfo> list = new ArrayList<AppInfo>();AppInfo myAppInfo;//获取到所有安装了的应用程序的信息,包括那些卸载了的,但没有清除数据的应用程序 List<PackageInfo> packageInfos = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);for(PackageInfo info:packageInfos){myAppInfo = new AppInfo();//拿到包名String packageName = info.packageName;//拿到应用程序的信息 ApplicationInfo appInfo = info.applicationInfo;//拿到应用程序的图标Drawable icon = appInfo.loadIcon(packageManager);//拿到应用程序的大小//long codesize = packageStats.codeSize;//Log.i("info", "-->"+codesize);//拿到应用程序的程序名String appName = appInfo.loadLabel(packageManager).toString();myAppInfo.setPackageName(packageName);myAppInfo.setAppName(appName);myAppInfo.setIcon(icon);if(filterApp(appInfo)){myAppInfo.setSystemApp(false);}else{myAppInfo.setSystemApp(true);}list.add(myAppInfo);}return list;}/***判断某一个应用程序是不是系统的应用程序,*如果是返回true,否则返回false。*/ public boolean filterApp(ApplicationInfo info){//有些系统应用是可以更新的,如果用户自己下载了一个系统的应用来更新了原来的,它还是系统应用,这个就是判断这种情况的if((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0){return true;}else if((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0){//判断是不是系统应用return true;}return false;}
}

最后在MainActivity类填写代码,处理结果,代码如下:

package com.xh.ui;import java.util.List;
import com.example.appmanager.R;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.annotation.SuppressLint;
import android.app.Activity;
/*** 类名称:MainActivity * 类描述:系统主页面* 创建人:LXH * 创建时间:2013-11-5 下午3:31:00 */
public class MainActivity extends Activity {private static final int GET_ALL_APP_FINISH = 1;  private ListView lv_app_manager;//应用信息列表  private LinearLayout ll_app_manager_progress; //进度条 private AppInfoProvider provider;  private AppManagerAdapter adapter;  private List<AppInfo> list;  @SuppressLint("HandlerLeak")  private Handler handler = new Handler()  {  public void handleMessage(Message msg)   {  switch(msg.what)  {  case GET_ALL_APP_FINISH :   //进度条设置为不可见  ll_app_manager_progress.setVisibility(View.GONE);  adapter = new AppManagerAdapter();  lv_app_manager.setAdapter(adapter);  break;  default :   break;  }  };  };  @Override  protected void onCreate(Bundle savedInstanceState)  {  super.onCreate(savedInstanceState);  setContentView(R.layout.main_layout);  lv_app_manager = (ListView) findViewById(R.id.lv_app_manager);  ll_app_manager_progress = (LinearLayout) findViewById(R.id.ll_app_manager_progress);  ll_app_manager_progress.setVisibility(View.VISIBLE);  /*** //开一个线程用于完成对所有应用程序信息的搜索  * 当搜索完成之后,就把一个成功的消息发送给Handler,* 然后handler把搜索到的数据设置进入listview里面  .* */new Thread()  {  public void run()   {  provider = new AppInfoProvider(MainActivity.this);  list = provider.getAllApps();  Message msg = new Message();  msg.what = GET_ALL_APP_FINISH;  handler.sendMessage(msg);  };  }.start();  }  //======================================================================  private class AppManagerAdapter extends BaseAdapter  {  @Override  public int getCount()  {  return list.size();  }  @Override  public Object getItem(int position)  {  return list.get(position);  }  @Override  public long getItemId(int position)  {  return position;  }  @Override  public View getView(int position, View convertView, ViewGroup parent)  {  AppInfo info = list.get(position);  if(convertView == null)  {  View view = View.inflate(MainActivity.this, R.layout.app_manager_item, null);  AppManagerViews views = new AppManagerViews();  views.iv_app_icon = (ImageView) view.findViewById(R.id.iv_app_manager_icon);  views.tv_app_name = (TextView) view.findViewById(R.id.tv_app_manager_name);  views.iv_app_icon.setImageDrawable(info.getIcon());  views.tv_app_name.setText(info.getAppName());  view.setTag(views);  return view;  }  else  {  AppManagerViews views = (AppManagerViews) convertView.getTag();  views.iv_app_icon.setImageDrawable(info.getIcon());  views.tv_app_name.setText(info.getAppName());  return convertView;  }  }  }  /*** 用来优化listview的类  * */private class AppManagerViews  {  ImageView iv_app_icon;  TextView tv_app_name;  }
}

好了,到此主要步骤和核心的代码就写完了,大家自己的项目上稍加修改,就可以了,资源文件大家可以从下面的链接中下载。今天的任务就结束了,由于内容比较简单,就不做详细说明了,下一篇我们将利用popupWindow类实现提示对话框!欢迎大家继续关注!(如下载资源后,遇到问题,请在博客里面留言,这样就可以大家一起交流了!)

【android开发】手机应用管理器的实现之获取应用列表(一)

【android开发】手机应用管理器的实现之获取应用列表(一)相关推荐

  1. android 布局管理器,【Android开发】布局管理器-表格布局

    在XML布局文件中定义表格布局管理器的基本语法: 属性列表 > 需要添加的UI组件 多个TableRow TableLayout支持的XML属性: android:collapseColumns ...

  2. android闹钟测试工具,android开发:AlarmManager闹钟管理器的实例

    1.AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的PendingIntent.通俗点,就是设置一 ...

  3. 【Android开发】布局管理器-线性布局

    这里实现垂直布局和水平布局: 垂直布局效果图: 实现代码: 垂直线性布局 res/layout/main.xml: <LinearLayout xmlns:android="http: ...

  4. 张利国,龚海平,王植萌.android移动开发入门与进阶,开题报告-基于Android的手机音乐播放器的设计与实现.doc...

    盐城师范学院 毕业设计开题报告 题 目: 基于android的手机音乐播放器 的设计与实现 姓 名: 二级学院: 信息工程学院 专 业: 软件工程 班 级: 12(1) 学 号: 指导教师: 职称: ...

  5. 基于 Android 系统手机通讯录管理软件【100010322】

    基于 Android 系统手机通讯录管理软件 第一章 绪论 1.1 项目研究背景 经过多年的发展,移动终端不再仅是通讯网络的终端,还将成为互联网的终端.因此,移动终端的应用软件和需要的服务将会有很大的 ...

  6. 文件管理器android实现,Android开发之简单文件管理器实现方法

    易采站长站为您分析Android开发之简单文件管理器实现方法,简单实现了Android的文件目录查看,文件重命名,打开,删除等功能,需要的朋友可以参考下 本文实例讲述了Android开发之简单文件管理 ...

  7. android fragment 管理器,Android Fragment 與 Fragment管理器

    Android Fragment 與 Fragment管理器 首先談談Fragement的需求 過去開發人員認為界面之間的跳轉只需要使用多個activity組成就行了: 例如下圖中,在Activity ...

  8. android做拨号程序代码,Android开发手机拨号程序实现实例源码介绍

    Android开发手机拨号程序实现实例源码介绍,在上一篇文章中,我们实现了第一个程序:helloWorld,并成功测试完成.还给大家介绍了Android项目结构和说明.现在写一个手机拨号程序: 首先, ...

  9. android之ion内存储器管理器,Android ION

    场景:android之ION内存储器管理器(1)- 简介 android之ION内存管理器(1)-- 简介 by JHJ(jianghuijun211@gmail.com) 为什么需要ION 回顾20 ...

  10. android 三星调用拍照功能吗,Android 开发手机(三星)拍照应用照片旋转问题解决办法...

    Android 开发手机(三星)拍照应用照片旋转问题解决办法 最近解决了一个令我头疼好久的问题,就是三星手机拍照图片旋转的问题,项目中有上传图片的功能,那么涉及到拍照,从相册中选择图片,别的手机都ok ...

最新文章

  1. 【ORACLE SQL 语言】SQL语言四大类
  2. svg里写入html标签,如何将HTML元素放在内联SVG上
  3. 实现图片打乱_2020 回顾 | 25张图片,记录潮州的这一年
  4. python复杂网络点图可视化_Python学习工具:9个用来爬取网络站点的 Python 库
  5. TensorFlow2.0(八)--tf.function函数转换
  6. springboot幂等性_SpringBoot+Redis实现接口幂等性,就看这篇了
  7. Vue-学生管理功能实例
  8. java math.floordiv,Math类的常用方法--田小江
  9. Combination Sum II - LeetCode
  10. laravel上传文件到s3,打开链接无法下载而是直接在浏览器中显示内容
  11. 计算机机房的荷载,​计算机信息中心机房建设标准
  12. EMC标准与测试方法
  13. 面试题整理 | 45道CSS面试题
  14. CTF密码学之Base64,Base32,Base16
  15. 凯酷键盘KC-84 大写和ctrl 功能调换问题
  16. java写一个接口_一个标准的java接口写法是怎样的?java对外接口怎么写?
  17. 表空间的相关查询命令
  18. C语言数据类型重新认识
  19. php preg_match 漏洞,PHP preg_match()函数信息泄露漏洞
  20. 抖音自媒体账号被限流?这3种方法教你如何鉴别

热门文章

  1. 迈普路由器访问控制列表配置命令_迈普路由器配置手册
  2. java按键机nes模拟器_NES 模拟器开发教程 12 - 输入设备
  3. 0x80070057复制从服务器复制文件,0x80070057各种错误解决方法教程
  4. 未能启动apache服务器,教你apache服务无法启动一直失败怎么办
  5. 在Windows中查看文件的MD5值
  6. 招商证券交易系统宕机上热搜,遭深圳证监局责令整改
  7. 光流与Lucas-Kanade 光流法
  8. mediawiki mysql_MediaWiki/安装
  9. BUUCTF Misc wp大合集(1)
  10. python Beautifulsoup4爬取凡人修仙传仙界篇连载中文章并生成txt