上一篇博客传送门:Android常见问题总结(六)

31.如何判断当前网络类型

想要判断Android设备当前的网络类型,我们可以使用ConnectivityManager类

通过ConnectivityManager#getActiveNetworkInfo我们可以获取NetworkInfo类,它包含了当前网络相关的信息

我们可以通过NetworkInfo#isAvailable来判断是否连上了网络

通过NetworkInfo#getType来判断当前网络是否wifi类型

至于移动网络的类型,我们可以通过NetworkInfo#getSubtype获取网络的类型,然后通过TelephonyManager#getNetworkClass来判断当前的网络究竟是那种具体类型(不过这个方法是hide,估计是官方觉得不准确就不公开了,我们可以打开源码把该方法拷贝出来使用)

具体判断网络类型的代码如下:

    public static final String NETWORK_WIFI = "Wifi";    public static final String NETWORK_2G = "2G";    public static final String NETWORK_3G = "3G";    public static final String NETWORK_4G = "4G";    public static final String NETWORK_OTHER = "Other";    public static final String NETWORK_NONE = "None";/**     * 获取当前网络类型     * @param context 上下文     * @return 网络类型     *     * @see #NETWORK_NONE     * @see #NETWORK_WIFI     * @see #NETWORK_2G     * @see #NETWORK_3G     * @see #NETWORK_4G     * @see #NETWORK_OTHER     */    public static String getNetworkDetailType(Context context) {        if (context == null) {            return NETWORK_NONE;        }        try {            ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo info = manager.getActiveNetworkInfo();            // 判断是否无网络            if (info == null || !info.isAvailable()) {                return NETWORK_NONE;            }            // 是否wifi            if (info.getType() == ConnectivityManager.TYPE_WIFI) {                return NETWORK_WIFI;            }            /**             * 判断移动网络类型,可见             * @see TelephonyManager#getNetworkClass             */            switch (info.getSubtype()) {                case TelephonyManager.NETWORK_TYPE_GPRS:                case TelephonyManager.NETWORK_TYPE_EDGE:                case TelephonyManager.NETWORK_TYPE_CDMA:                case TelephonyManager.NETWORK_TYPE_1xRTT:                case TelephonyManager.NETWORK_TYPE_IDEN:                    return NETWORK_2G;                case TelephonyManager.NETWORK_TYPE_UMTS:                case TelephonyManager.NETWORK_TYPE_EVDO_0:                case TelephonyManager.NETWORK_TYPE_EVDO_A:                case TelephonyManager.NETWORK_TYPE_HSDPA:                case TelephonyManager.NETWORK_TYPE_HSUPA:                case TelephonyManager.NETWORK_TYPE_HSPA:                case TelephonyManager.NETWORK_TYPE_EVDO_B:                case TelephonyManager.NETWORK_TYPE_EHRPD:                case TelephonyManager.NETWORK_TYPE_HSPAP:                    return NETWORK_3G;                case TelephonyManager.NETWORK_TYPE_LTE:                    return NETWORK_4G;                default:                    return NETWORK_OTHER;            }        } catch (Exception e) {            L.exception(e);        }        return NETWORK_NONE;    }


32.关于Android resources资源的问题

可以参考官方文档解决问题: https://developer.android.com/guide/topics/resources/overview.html

33.adb shell dumpsys 指令使用

该命令用于打印出当前系统信息,默认打印出设备中所有service的信息,可以在命令后面加指定的service name.
有两种方法可以查看service list:
  • adb shell dumpsys:输出信息的开始部分就是所有运行的service
  • adb shell service list
只要我们在指令后添加对应service name,就能查看指定service的信息: adb shell dumpsys activity (查看activity堆栈相关信息) adb shell dumpsys display (查看显示相关信息,可以查看分辨率)
其中,有些service还可以带上额外的参数,我们可以使用 -h 来查看帮助信息: adb shell dumpsys activity -h (可以查到top等参数的用法)

更多相关文章

  1. 用网络adb连接调试Android
  2. Android下使用Socket连接网络电脑
  3. Android:ImageView如何显示网络图片
  4. Android开发实践 网络通信 URL、URLConnection、HttpClient
  5. Android利用Fiddler进行网络数据抓包
  6. Android判断当前的android设备是否处于联网状态
  7. Android(安卓)RelativeLayout(相对布局)简介
  8. android sim卡 TelephonyManager类:Android手机及Sim卡状态的获取
  9. Android获取运营商代码

随机推荐

  1. 使用Vitamio打造自己的Android万能播放器
  2. Android手势ImageView之(自定义GestureDet
  3. Android事件总线之EventBus3.0基本使用
  4. 给大家介绍几个常见的Android代码片段
  5. 很好的一些开源项目(转自:http://www.uur
  6. Android应用开发的插件化 模块化
  7. Android:Material系列:ActionBar-->Toolb
  8. Android使用第三方字体
  9. Android中自定义组合控件
  10. .Net程序员玩转Android开发---(12)ListVi