安装应用

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与上面的每个属性数字进行&操作得到的结果为原来的数字)

所以  魔法&至尊钻戒得到魔法




上一篇下一篇

猜你喜欢

热点阅读