关闭

Android进阶-各种Manager(一)

标签: android
74人阅读 评论(0) 收藏 举报
分类:

Android进阶-各种Manager(一)

PackageManager

这个类可以用于获取各种已经安装了的应用包的信息,
简单使用:
/这个类方法,将得到系统所有应用的信息/

    public static Map<String, List<AppInfo>> getSystemAppInfo(Context context){

        Map<String, List<AppInfo>>  appInfos = new HashMap<>();
        List<AppInfo> userApp = new ArrayList<>();
        List<AppInfo> sysApp = new ArrayList<>();

        PackageManager pm = context.getPackageManager();
        List<PackageInfo> packInfos = pm.getInstalledPackages(0);
        AppInfo appinfo = null;

        for(PackageInfo packInfo : packInfos){
            appinfo = new AppInfo();
            String packname = packInfo.packageName;  //得到包名

            Drawable icon = packInfo.applicationInfo.loadIcon(pm);  //得到应用图标

            String appname = packInfo.applicationInfo.loadLabel(pm).toString(); //得到应用名

            //应用程序apk包的路径
            String apkpath = packInfo.applicationInfo.sourceDir;  //得到应用路径
            appinfo.setApkpath(apkpath);
            long appSize = new File(apkpath).length();    //进而得到应用大小


            //应用程序安装的位置。
            int flags = packInfo.applicationInfo.flags; //二进制映射  大bit-map
            if((ApplicationInfo.FLAG_EXTERNAL_STORAGE&flags)!=0){   //判断应用的安装位置
                //外部存储
                appinfo.setInRom(false);
            }else{
                //手机内存
                appinfo.setInRom(true);
            }
            /*封装得到的数据*/
        }

        appInfos.put("userApp", userApp);
        appInfos.put("sysApp", sysApp);
        return appInfos;
    }

ActivityManager

用来管理,系统中所有正在运行的应用。还可以用它来获得手机的基本信息
使用范例:

    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    am.getRunningServices(200);     //获取手机中正在运行的服务, 200代表返回的最大数量
    am.getRunningAppProcesses();    //获取手机上正在运行的进程
    am.getMemoryInfo(new ActivityManager.MemoryInfo()); //获取手机内存的基本信息  ,但是这个API只在高版本可用
    am.getDeviceConfigurationInfo(); //获取手机的配置信息
    am.killBackgroundProcess();  //消灭进程
    .....

上面说使用ActivityManager 获取手机内存的信息只能在高版本使用,那么怎么在低版本中获得这个信息呢。
大家都知道android的底层是linux, 在linux中的proc文件夹存放着当前系统运行进程的信息, 因此我们可以通过
/proc文件夹下的内容,来获得手机运行的一些信息,例如下面这段代码,就能获得手机的内存大小

    public static long getTotalMem(Context context) {
            //这里我们要获得的总内存,位于/proc/meminfo文件中的第一行, 因此只要读出第一行,再做处理就可以了
            // 第一行内容范例: MemTotal: 344740 kB "
            try {
                // /proc/meminfo 配置文件的路径
                FileInputStream fis = new FileInputStream(new File("/proc/meminfo"));
                BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
                String readLine = reader.readLine();
                StringBuffer sb = new StringBuffer();
                for (char c : readLine.toCharArray()) {
                    if (c >= '0' && c <= '9') {
                        sb.append(c);
                    }
                }
                return Long.parseLong(sb.toString()) * 1024;
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return 0;
        }

LocationManeger

This class provides access to the system location services. These services allow applications to obtain periodic updates of the
device’s geographical location, or to fire an application-specified Intent when the device enters the proximity of a given geographical location.
即,这个类可以帮助使用系统的Location服务,通过这个服务我们可以实时更新我们设备的物理位置,并且还可以当我们的设备到达一个特定的物理位置是,做我们要做的事
注意,手机定位的方式有多种:GPS、AGPS、网络定位

使用范例:

    @Override
    public void onCreate() {
        lm = (LocationManager) getSystemService(LOCATION_SERVICE);  //获取LocationManager
        listener = new MyListener();
        Criteria criteria = new Criteria(); //criteria 查询条件
        criteria.setAccuracy(Criteria.ACCURACY_FINE);//获取准确的位置。
        criteria.setCostAllowed(true);//允许产生开销
        String  name = lm.getBestProvider(criteria, true);      //true只返回可用的位置提供者 
        System.out.println("最好的位置提供者:"+name);
        lm.requestLocationUpdates(name, 0, 0, listener); //设置定位监听
        super.onCreate();
    }

    private class MyListener implements LocationListener{

        @Override
        public void onLocationChanged(Location location) {
            StringBuilder sb = new StringBuilder();
            System.out.println("精确度:"+location.getAccuracy());
            System.out.println("移动的速度:"+location.getSpeed());
            System.out.println("纬度:"+location.getLatitude());
            System.out.println("经度:"+location.getLongitude());
            System.out.println("海拔:"+location.getAltitude());
            /*.....*/
        }
        //当位置提供者 状态发生变化的时候调用的方法。
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }
        //当某个位置提供者 可用的时候调用的方法。
        @Override
        public void onProviderEnabled(String provider) {

        }
        //当某个位置提供者 不可用的时候调用的方法。
        @Override
        public void onProviderDisabled(String provider) {

        }

    }
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:51794次
    • 积分:2298
    • 等级:
    • 排名:第16285名
    • 原创:179篇
    • 转载:27篇
    • 译文:0篇
    • 评论:3条
    最新评论