Android进阶-各种Manager(一)

原创 2015年11月19日 20:32:22

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) {

        }

    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

蓝牙基础知识进阶——Link Manager通用规则介绍

 Link Manager Protocol(简称LMP)是用来建立和控制link的。它在整个蓝牙的架构中所处的位置如图0-1中红色矩形所示。 图0-1 Lin...

Android高手进阶教程.pdf

  • 2017-09-27 22:09
  • 1.97MB
  • 下载

android 开发进阶

  • 2013-07-29 13:50
  • 1.87MB
  • 下载

Android进阶之大话设计模式

对于开发者来说,设计模式想必都不陌生,而在Android开发中,设计模式起到的作用是不容小视的,最基本的设计模式就有八种,从基本角度来说,适配器往往是我们更加经常用到的,那么,我们要怎样才能全面理解这...

Android高手进阶教程

  • 2013-11-24 21:06
  • 1.97MB
  • 下载

Android界面使用进阶版

  • 2014-04-19 11:50
  • 1.19MB
  • 下载

Android进阶之路 - FastJson送给如我从前般的新手

此文仅献给如从前的我的新手,用最简单的方式去copy知识在Android中,我们写完UI,除去逻辑,或许最多的就是网络请求,数据解析,关于网络请求,之前已经写过了,那么这里讲的是JSON解析了,在An...

android UI进阶之实现listview的分页加载 处理加载完毕

http://blog.csdn.net/notice520/article/details/7248094 上篇博文和大家分享了下拉刷新,这是一个用户体验非常好的操作方式。新浪微薄就是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)