如何监控网络类型并在其发生变化时收到通知

时间:2014-08-30 11:34:52

标签: android 3g android-networking telephonymanager

我试图创建一个应用程序来显示我使用TelephonyManager完成的网络类型(2G,3G或4G)的状态,并在网络类型发生变化时通知用户。 这是我遇到问题的部分,如何监控网络类型并在其发生变化时收到通知?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

你需要这样的东西:(记住这只适用于Android 4.2 +)

    // It Only works on Android 4.2+
    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    telephonyManager.listen(new PhoneStateListener(){

        @Override
        public void onCellInfoChanged(List<CellInfo> cellInfo) {
            super.onCellInfoChanged(cellInfo);
            for (CellInfo ci : cellInfo) {
                if (ci instanceof CellInfoGsm) {
                    Log.d("TAG", "This has 2G");
                } else if (ci instanceof CellInfoLte) {
                    Log.d("TAG", "This has 4G");
                } else {
                    Log.d("TAG", "This has 3G");
                }
            }
        }


    }, PhoneStateListener.LISTEN_CELL_INFO);

您还需要清单中的android.permission.READ_PHONE_STATE权限。

答案 2 :(得分:0)

过了一段时间,这是一个有效的代码:

onCreate下的

    TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    TelephonyMgr.listen(new TeleListener(),
            PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

作为一个班级:

public class TeleListener extends PhoneStateListener {  
    public void onDataConnectionStateChanged (int state, int networkType){
        super.onDataConnectionStateChanged(state, networkType);  
   //Whatever you wanna do  
      }  
}

当网络类型(2G,3G,4G)发生变化或连接状态(连接,断开连接等)发生变化时,方法onDataConnectionStateChanged(int state, int networkType)被触发