我的手机管家(17) 应用管理 获取安装的应用程序

与进程管理的区别是: 进程只是查询内存中的正在运行的应用程序

而应用管理是查询所有Data和Sdk卡中的应用程序

通过PackageManager 来获取已经安装了的应用程序

PackageManager    贯穿了进程管理, 缓存清除, 应用管理

AppInfo 用来存储获取的应用信息,

public class AppInfo {
    private Drawable icon;
    private String appName;
    private String packageName;
    private boolean isUserApp;//true:用户应用   false:系统应用
    private boolean isRom;//true:表示手机内存   false:表示SD卡内存
}

通过packageManager.getInstalledPackages(0)获取所有已经按住

了的应用信息  List<ApplicationInfo>

通过  ApplicationInfo.flags   应用程序的特征, 以及是内部存储还是sdk存储

设置AppInfo的信息

如下判断系统应用和用户应用,   以及存储的位置

 int flags=applicationInfo.flags;//应用程序的特征
            if((flags & ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){
                //系统应用
                appInfo.setUserApp(false);
            }else{
                appInfo.setUserApp(true);
            }
            //判断是内存手机存储还是外部存储
            if((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE)==ApplicationInfo.FLAG_EXTERNAL_STORAGE){
                //外置存储
                appInfo.setRom(false);
            }else{
                appInfo.setRom(true);
            }

定义一个获取已经安装的应用程序信息:

package com.chb.myphonesave.provider;
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;

import com.chb.myphonesave.entity.AppInfo;
/**
 *获取已经安装的应用的信息
 */
public class AppInfoProvider {

    public static List<AppInfo> getAppInfos(Context ct){
        List<AppInfo> list = new ArrayList<AppInfo>();
        PackageManager pm = ct.getPackageManager();
        //获取已安装的程序应用包
        List<PackageInfo> appList =pm.getInstalledPackages(0);
        for(PackageInfo info :appList){
            AppInfo appInfo=new AppInfo();

            //应用程序包名
            String packageName=info.packageName;
            ApplicationInfo applicationInfo = info.applicationInfo;
            //应用程序图标
            Drawable icon = applicationInfo.loadIcon(pm);
            //应用名称
            String appName=applicationInfo.loadLabel(pm).toString() + applicationInfo.uid;

            int flags=applicationInfo.flags;//应用程序的特征
            if((flags & ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){
                //系统应用
                appInfo.setUserApp(false);
            }else{
                appInfo.setUserApp(true);
            }
            //判断是内存手机存储还是外部存储
            if((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE)==ApplicationInfo.FLAG_EXTERNAL_STORAGE){
                //外置存储
                appInfo.setRom(false);
            }else{
                appInfo.setRom(true);
            }
            appInfo.setAppName(appName);
            appInfo.setIcon(icon);
            appInfo.setPackageName(packageName);
            list.add(appInfo);
        }
        return list;
    }
}
时间: 2024-08-26 19:06:08

我的手机管家(17) 应用管理 获取安装的应用程序的相关文章

#17# SCCM管理 -软件中心 VS 应用程序目录网站点

软件中心 VS 应用程序目录网站点 本篇文章主要讨论ConfigMgr软件中心(Software Center)及应用程序目录网站点(Application Catalog)的区别 软件程序(包括应用程序.包) 对于目的为"可用"的部署类型,有如下区分: 在SCCM 1511之前 部署集合 部署显示于 设备集合 软件中心 用户集合 应用程序目录网站点 在SCCM 1511及之后 部署集合 部署显示于 设备集合 软件中心 用户集合 应用程序目录网站点及软件中心 "要求"

我的手机管家(2) 进程管理布局

我的手机管家(2)  进程管理 (1)获取进程信息:所有的进程信息, 正在运行的进程信息, 剩余可用内存 (2)获取进程信息是一个耗时的操作, 首先在使用子线程获取进程信息的时候显示缓冲界面,缓冲加载完成后, 通知LIstView展示数据,加载适配器, 同时缓冲结束 获取进程信息的提供者: package com.ejob.phonesafe.provider; import java.io.BufferedReader; import java.io.FileReader; import ja

我的手机管家(19) 应用管理 单独介绍一下PopupWindow

我的手机管家(19) 应用管理  单独介绍一下PopupWindow 在前一节中使用点击ListView 出现一个弹出窗口, 用来显示我们的需求. PopupWindow: A popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity. PopupWindow 是一个

通过线程通讯获取手机正在运行中的软件及大小(仿手机管家 扫描软件)

其实我原本是只想说一个线程之间的通讯 handler,但是觉得内容有点少,就直接写了个demo.我之前是做过仿手机管家这种软件的(当然只是自己做着好玩的),所以 就提取了一点内容结合线程通讯写了个小的demo. 不说废话了,直接上代码: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas

我的手机管家(21) 设置中心

我的手机管家(21) 设置中心 : 包括三个界面:四个功能 (1)电话归属地查询 使用SQLIteDatabase 查询address.db, 查询指定号码的归属地 (2) 检查应用版本更新 (3)关于我的手机管家信息 (4)黑名单服务的开启与关闭 黑名单服务: 通过绑定广播进行短信的拦截, 会比静态注册先拦截短信 通过电话管理器TelephonyManager监听电话状态 一旦有电话打入, 首先进行黑名单对比. package com.chb.myphonesave.service; impo

我的手机管家(10)病毒扫描 拷贝病毒数据库

我的手机管家(10)病毒扫描    拷贝病毒数据库 (1)将病毒数据库复制到asserts文件夹下,然后复制到 "data/data/com.chb.myphonesafe/files/antivirus.db" //数据库路径必须是data/data目录下,否则无法访问 拷贝:AssetUtil package com.chb.myphonesave.util; import java.io.File; import java.io.FileOutputStream; import

我的手机管家(15) 缓存处理 逻辑代码

我的手机管家(15) 缓存处理   逻辑代码 private PackageManager pm;//包管理器 //获取包管理器 pm = getPackageManager(); 使用子线程获取应用程序的整体包信息,  PackageInfo 存储包的整体信息 List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES); //开始遍历每个包,获取图标,名称, 大小

我的手机管家(1) 主界面

我的手机管家 主界面布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" a

Android之——获取手机安装的应用程序

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47114331 前几篇有关Android的博文中,向大家介绍了几个项目中常用的实用功能,那么在这篇博文中,我将向大家介绍如何获取Android手机中已经安装的手机应用程序,实用过金山手机卫士或者360手机卫士的童鞋都知道,这些软件都可以获取到当前手机中安装的应用程序.那么,这些功能是如何实现的呢?就让我们一起来看看这些功能具体是如何实现的吧. 一.原理 原理很简单,我们通过Andr