Android中获取设备的各种信息总结

发布时间:2016-09-07 09:23:11

相信各位Android的开发者们都知道,现在几乎所有的app都需要获得设备信息,那么下面这篇文章就来详细说说获取设备信息的方法。

一、屏幕分辨率

Display display = getWindowManager().getDefaultDisplay();

Point size = new Point();

display.getSize(size);

int width = size.x;

int height = size.y;

或者:

DisplayMetrics metrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(metrics);

int width = metrics.widthPixels;

int height = metrics.heightPixels

上面的代码是要在能获取到Activity的情况下使用的,如果无法获取到Activity,则可以使用一下的代码:

WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);

Display display = wm.getDefaultDisplay();

Point point = new Point();

display.getSize(point);

int width = point.x;

int height = point.y;

二、屏幕尺寸

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

int width=dm.widthPixels;

int height=dm.heightPixels;

int dens=dm.densityDpi;

double wi=(double)width/(double)dens;

double hi=(double)height/(double)dens;

double x = Math.pow(wi,2);

double y = Math.pow(hi,2);

double screenInches = Math.sqrt(x+y);

同样,上面的代码需要在能获取到Activity。

三、获取app名称

public static String getAppName(Context context) {

  String appName = "";

  try {

    PackageManager packageManager = context.getPackageManager();

    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);

    appName = (String) packageManager.getApplicationLabel(applicationInfo);

  } catch (PackageManager.NameNotFoundException e) {

    e.printStackTrace();

  }

  return appName;

}

四、获取设备厂商和设备名称信息

// 设备厂商

String brand = Build.BRAND;

// 设备名称

String model = Build.MODEL;

获取DeviceID,SIM和IMSI

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

String deviceId = tm.getDeviceId();

String sim = tm.getSimSerialNumber();

String imsi = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE).getSubscriberId();

注意需要在AndroidManifest中添加权限

五、获取网络状态

public static String getAPNType(Context context) {

  //结果返回值

  String netType = "nono_connect";

  //获取手机所有连接管理对象

  ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

  //获取NetworkInfo对象

  NetworkInfo networkInfo = manager.getActiveNetworkInfo();

  //NetworkInfo对象为空 则代表没有网络

  if (networkInfo == null) {

    return netType;

  }

  //否则 NetworkInfo对象不为空 则获取该networkInfo的类型

  int nType = networkInfo.getType();

  if (nType == ConnectivityManager.TYPE_WIFI) {

    //WIFI

    netType = "wifi";

  } else if (nType == ConnectivityManager.TYPE_MOBILE) {

    int nSubType = networkInfo.getSubtype();

    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

    //4G

    if (nSubType == TelephonyManager.NETWORK_TYPE_LTE

        && !telephonyManager.isNetworkRoaming()) {

      netType = "4G";

    } else if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS || nSubType == TelephonyManager.NETWORK_TYPE_HSDPA || nSubType == TelephonyManager.NETWORK_TYPE_EVDO_0 && !telephonyManager.isNetworkRoaming()) {

      netType = "3G";

    //2G 移动和联通的2G为GPRS或EGDE,电信的2G为CDMA

    } else if (nSubType == TelephonyManager.NETWORK_TYPE_GPRS || nSubType == TelephonyManager.NETWORK_TYPE_EDGE || nSubType == TelephonyManager.NETWORK_TYPE_CDMA && !telephonyManager.isNetworkRoaming()) {

      netType = "2G";

    } else {

      netType = "2G";

    }

  }

  return netType;

}

六、判断设备是否root

网上有很多判断方法,但有些会在界面上弹窗提示获取权限,下面介绍一种无需弹窗判断设备是否root的方法:

/** 判断手机是否root,不弹出root请求框
*/

  public static boolean isRoot() {

    String binPath = "/system/bin/su";

    String xBinPath = "/system/xbin/su";

    if (new File(binPath).exists() && isExecutable(binPath))

      return true;

    if (new File(xBinPath).exists() && isExecutable(xBinPath))

      return true;

    return false;

  }

  private static boolean isExecutable(String filePath) {

    Process p = null;

    try {

      p = Runtime.getRuntime().exec("ls -l " + filePath);

      // 获取返回内容

      BufferedReader in = new BufferedReader(new InputStreamReader(

          p.getInputStream()));

      String str = in.readLine();

      if (str != null && str.length() >= 4) {

        char flag = str.charAt(3);

        if (flag == 's' || flag == 'x')

          return true;

      }

    } catch (IOException e) {

      e.printStackTrace();

    } finally {

      if (p != null) {

        p.destroy();

      }

    }

    return false;

  }

七、总结

以上就是关于获取Android中设备各种信息的全部内容,这篇文章对大家开发Android App具有一定参考借鉴价值,希望对大家能有所帮助,如果有疑问大家可以留言交流。

更多相关文章

  1. Kali Linux将Android设备变成黑客瑞士军刀
  2. Android中使用putExtra()传递对象实例
  3. Android官方开发文档Training系列课程中文版:连接无线设备之通过W
  4. Android P Launcher3中添加未读信息角标
  5. android从未安装的apk文件里获取信息(包信息,资源信息)
  6. android中,handler处理信息中弹出提示框注意事项
  7. android 访问 webservice 获取信息

随机推荐

  1. Android开发人员必须掌握的10 个开发工具
  2. [Android]LayoutInflater的inflate方法半
  3. Android(安卓)Support Design Library之C
  4. 64位ubuntu 11.10下android开发环境的搭
  5. okhttp3 拦截器源码分析
  6. Android应用AsyncTask处理机制详解及源码
  7. 精通android体系架构、mvc、常见的设计模
  8. AndroidのTween动画实现
  9. AndroRat-Android木马使用教程
  10. 编写android对google地图的调用