安装应用
2018-08-12 本文已影响0人
dev晴天
界面的分析
应用图标
应用名称
应用的存储路径(内存 还是sd卡)
应用类型(用户应用还是系统应用)
应用包名
数据进行封装如javabean
package com.example.administrator.mobilephonehousekeeper.Utils;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.widget.ListView;
import com.example.administrator.mobilephonehousekeeper.Beans.AppPackageInfo;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/12/24.
* 获得安装在手机上的应用的相关信息
* 图标 应用包名 应用名称 是否为系统应用 是否为sd卡应用
*/
public class ProvideAppInfos {
// 返回集合对象
public static List<AppPackageInfo> getAppInfos(Context context) {
List<AppPackageInfo> mList = null;
AppPackageInfo appPackageInfo = null;
//1 获得包管理者对象
PackageManager pm = context.getPackageManager();
//2 获得安装在手机上的应用包 返回 ListView集合 泛型 PackageInfo
List<PackageInfo> PInfos = pm.getInstalledPackages(0);
// 3 循环遍历集合 取出相关的信息 进行封装
mList = new ArrayList<>();
for (PackageInfo packageInfo : PInfos) {
appPackageInfo = new AppPackageInfo();//声明对象
appPackageInfo.setAppPacksgeName(packageInfo.packageName);// 应用包名
// 获取应用图标先调用 对象的内部类对象 在调用图标 图标与名字都在applacation节点上
appPackageInfo.setAppIcon(packageInfo.applicationInfo.loadIcon(pm));
appPackageInfo.setAppName(packageInfo.applicationInfo.loadLabel(pm).toString());
// 系统应用 与sd卡应用的判断(用到了状态机的概念) 也是在applacation节点上
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) ==
ApplicationInfo.FLAG_SYSTEM) {
appPackageInfo.setInstalledInSystem(true);
} else {
appPackageInfo.setInstalledInSystem(false);
}
// sd卡应用的判断
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) ==
ApplicationInfo.FLAG_EXTERNAL_STORAGE) {
appPackageInfo.setInstalledInSDCard(true);
} else {
appPackageInfo.setInstalledInSDCard(true);
}
mList.add(appPackageInfo);
}
return mList;
}
}
补充:状态机
背景产生:
// 是否为系统应用(用到状态机的概念)
if ((packageInfo.applicationInfo.flags& ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){
// 与出结果 为true 判定为系统应用
}
举例:
假如在游戏中
加血 对应数字 0001
加魔法 0010
加速度 0100
加防御 1000
假如至尊钻戒 1111 四种属性都加(1111与上面的每个属性数字进行&操作得到的结果为原来的数字)
所以 魔法&至尊钻戒得到魔法