美文网首页
安装应用

安装应用

作者: dev晴天 | 来源:发表于2018-08-12 12:07 被阅读0次
    界面的分析 
                应用图标
                应用名称
                应用的存储路径(内存 还是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与上面的每个属性数字进行&操作得到的结果为原来的数字)
    
    所以  魔法&至尊钻戒得到魔法
    
    
    
    
    

    相关文章

      网友评论

          本文标题:安装应用

          本文链接:https://www.haomeiwen.com/subject/fhrsbftx.html