android:获取APP开发中需要的数据

在app开发中经常需要获取一些app的数据或者手机信息。由于经常用到,道长就积累了一些。现在和小伙伴们分享一下。

一、app中的信息

1.获取控件的宽、高

这里获取的宽高并非是设置的控件的dp值,而是返回的像素值,实现代码如下:

  ViewTreeObserver viewTreeObserver = image_view.getViewTreeObserver();
  viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
      @Override
      public void onGlobalLayout() {
          image_view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
          Log.e("yushan", image_view.getHeight() + "," + image_view.getWidth());
      }
  });

注意:这段代码要放到Activity的onCreate()中,否则无效。

2.获取状态栏的高

实现代码如下:

    private int getStatusBarHeight() {
        Class<?> clazz = null;
        Object obj = null;
        Field field = null;
        int x = 0;
        try {
            clazz = Class.forName("com.android.internal.R$dimen");
            obj = clazz.newInstance();
            field = clazz.getField("status_bar_height");
            x = Integer.parseInt(field.get(obj).toString());
            return getResources().getDimensionPixelSize(x);
        } catch (Exception e) {
            e.printStackTrace();
            return 75;
        }
    }

3.获取actionBar的高度

实现代码如下:

    private int getActionBarHeight() {

        int actionBarHeight = ((ActionBarActivity) activity)
                .getSupportActionBar().getHeight();
        if (actionBarHeight != 0) {
            return actionBarHeight;
        }

        final TypedValue tv = new TypedValue();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            if (((ActionBarActivity) activity).getTheme()
                    .resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
                actionBarHeight = TypedValue.complexToDimensionPixelSize(
                        tv.data, getResources().getDisplayMetrics());
            }
        } else {
            // 使用android.support.v7.appcompat包做actionbar兼容的情况
            if (((ActionBarActivity) activity).getTheme()
                    .resolveAttribute(
                            android.support.v7.appcompat.R.attr.actionBarSize,
                            tv, true)) {
                actionBarHeight = TypedValue.complexToDimensionPixelSize(
                        tv.data, getResources().getDisplayMetrics());
            }

        }

        return actionBarHeight;
    }

注意:这里使用的Activity必须是actionBarActivity的子类,也就是说actionBar必须存在。

二、手机信息

1.获取手机型号

String model = Build.MODEL;

2.获取手机品牌

String board = Build.BOARD;

3.获取手机序列号(IMEI)

首先在清单文件中添加权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

然后实现代码如下:

        TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        String szImei = TelephonyMgr.getDeviceId();

注意:如果你的手机是水货(没有量产的手机),返回值可能是无效的IMEI。

4.获取手机屏幕的宽、高

    DisplayMetrics metric = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metric);
    int width = metric.widthPixels;  // 屏幕宽度(像素)
    int height = metric.heightPixels;  // 屏幕高度(像素)

注意:这些代码要放到Activity的onCreate()方法中。

5.获取手机屏幕的像素密度

    DisplayMetrics metric = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metric);
    float density = metric.density;  // 屏幕密度(0.75 / 1.0 / 1.5)
    int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240)

注意:这些代码要放到Activity的onCreate()方法中。

6.获取手机内存大小

    // 获取android当前可用内存大小
    private String getAvailMemory() {
        ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
        am.getMemoryInfo(mi);
        // mi.availMem; 当前系统的可用内存
        return Formatter.formatFileSize(getBaseContext(), mi.availMem);// 将获取的内存大小规格化
    }

    private String getTotalMemory() {
        String str1 = "/proc/meminfo";// 系统内存信息文件
        String str2;
        String[] arrayOfString;
        long initial_memory = 0;
        try {
            FileReader localFileReader = new FileReader(str1);
            BufferedReader localBufferedReader = new BufferedReader(
                    localFileReader, 8192);
            str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小
            arrayOfString = str2.split("\\s+");
            for (String num : arrayOfString) {
                Log.i(str2, num + "\t");
            }
            initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
            localBufferedReader.close();
        } catch (IOException e) {
        }
        return Formatter.formatFileSize(getBaseContext(), initial_memory);// Byte转换为KB或者MB,内存大小规格化
    }

7.获取SD卡的容量

    public void SDKSPace(){
        //获取SDcard的目录
        File SDcardDir = Environment.getExternalStorageDirectory();
        //获取SDcard的容量
        long totalSpace = SDcardDir.getTotalSpace();
        //获取SDcard的可用容量
        long usableSpace = SDcardDir.getUsableSpace();

        //转换SDcard的容量
        String total = Formatter.formatFileSize(this, totalSpace);
        String usable = Formatter.formatFileSize(this, usableSpace);

        rom.setText("SD卡总容量:" + total + "  可用容量:" + usable);
    }

暂时只有这么多,这个道长以后还会有补充的。希望这篇博客能够为小伙伴提供一些帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值