安卓之网络信号监听(4G,3G,2G)

有时候我们需要实时监听手机的网络及其它的信号值,但是菜鸟的我在网上百度了很久,没有找到比较合适的例子,后面直接看系统的API,完成了下面的例子,在这做一下笔记:

   public static void getPhoneState(Context context) {
   final TelephonyManager telephonyManager = (TelephonyManager)     context.getSystemService(Context.TELEPHONY_SERVICE);
    PhoneStateListener MyPhoneListener = new PhoneStateListener() {
        @Override
       //获取对应网络的ID,这个方法在这个程序中没什么用处
        public void onCellLocationChanged(CellLocation location) {
            if (location instanceof GsmCellLocation) {
                int CID = ((GsmCellLocation) location).getCid();
            } else if (location instanceof CdmaCellLocation) {
                int ID = ((CdmaCellLocation) location).getBaseStationId();
            }
        }
       //系统自带的服务监听器,实时监听网络状态
        @Override
        public void onServiceStateChanged(ServiceState serviceState) {
            super.onServiceStateChanged(serviceState);
        }
       //这个是我们的主角,就是获取对应网络信号强度
        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
             //这个ltedbm 是4G信号的值
            String signalinfo = signalStrength.toString();
            String[] parts = signalinfo.split(" ");
            int ltedbm = Integer.parseInt(parts[9]);
             //这个dbm 是2G和3G信号的值
            int asu = signalStrength.getGsmSignalStrength();
            int dbm = -113 + 2 * asu;

            if (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_LTE) {
                Log.i("NetWorkUtil", "网络:LTE 信号强度:" + ltedbm + "======Detail:" + signalinfo);
            } else if (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSDPA ||
                    telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSPA ||
                    telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSUPA ||
                    telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS)                                               {
                String bin;
                if (dbm > -75) {
                    bin = "网络很好";
                } else if (dbm > -85) {
                    bin = "网络不错";
                } else if (dbm > -95) {
                    bin = "网络还行";
                } else if (dbm > -100) {
                    bin = "网络很差";
                } else {
                    bin = "网络错误";
                }
                Log.i("NetWorkUtil", "网络:WCDMA 信号值:" + dbm + "========强度:" + bin + "======Detail:" + signalinfo);
            } else {
                String bin;
                if (asu < 0 || asu >= 99) bin = "网络错误";
                else if (asu >= 16) bin = "网络很好";
                else if (asu >= 8) bin = "网络不错";
                else if (asu >= 4) bin = "网络还行";
                else bin = "网络很差";
                Log.i("NetWorkUtil", "网络:GSM 信号值:" + dbm + "========强度:" + bin + "======Detail:" + signalinfo);
            }
            super.onSignalStrengthsChanged(signalStrength);
        }
    };
    telephonyManager.listen(MyPhoneListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,922评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,190评论 4 61
  • 目录 江宁,铃兰村。 一条弯弯曲曲的小溪,溪水叮咚,透彻见底,两岸的植被将河面熏染成沁人心脾的青绿色。 在河势较低...
    冷清持阅读 4,276评论 9 25
  • 如果问,你的人生是以什么划分的? 你的答案是? 一年?五年?十年?还是某个重要的人生节点? 在我上学的时候,我的人...
    小婉说阅读 1,943评论 0 0
  • 这部剧很火,而我一直对时尚后知后觉。 情深义重,问世间情为何物,直教人生死相许? 一见就难以忘怀。 星移,吴聘,都...
    我的四合院阅读 1,150评论 4 1