Android 如何监视网络类型并在其更改时获得通知

Android 如何监视网络类型并在其更改时获得通知,android,3g,android-networking,telephonymanager,Android,3g,Android Networking,Telephonymanager,我正在尝试制作一个应用程序,既可以显示网络类型(2G、3G或4G)的状态,也可以在网络类型更改时通知用户。 这是我遇到的问题,我如何监控网络类型并在其发生变化时得到通知?您应该在这里找到有关网络变化的答案 编辑移动网络查看此答案 这篇文章: 您需要这样的东西:(记住这只适用于Android 4.2+) //它只适用于Android 4.2+ TelephonyManager TelephonyManager=(TelephonyManager)getSystemService(电话服务); li

我正在尝试制作一个应用程序,既可以显示网络类型(2G、3G或4G)的状态,也可以在网络类型更改时通知用户。
这是我遇到的问题,我如何监控网络类型并在其发生变化时得到通知?

您应该在这里找到有关网络变化的答案

编辑移动网络查看此答案

这篇文章:

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

//它只适用于Android 4.2+
TelephonyManager TelephonyManager=(TelephonyManager)getSystemService(电话服务);
listen(新的PhoneStateListener(){
@凌驾
已更改的公用void onCellInfo(列表cellInfo){
super.onCellInfoChanged(cellInfo);
对于(CellInfo ci:CellInfo){
if(CellInfoGsm的ci实例){
Log.d(“标签”,“这有2G”);
}else if(CellInfoLte的ci实例){
Log.d(“标签”,“这有4G”);
}否则{
Log.d(“标签”,“这有3G”);
}
}
}
},PhoneStateListener.LISTEN\u CELL\u INFO);

您还需要android.permission.READ_PHONE_STATE权限。过一会儿,这里有一个工作代码:

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)

您在TelephonyManager中尝试过
listen
方法吗?我无法理解[Google参考](,int)中的此方法)你能帮我把它分解一下吗,谢谢,尽管这显示了它的移动数据、wifi或wimax。。。我需要的是监控不同类型的移动数据(2G、3G或4G)有什么想法吗?感谢您的努力,编辑部分中的两个链接决定了移动数据的类型,当调用时,我希望在数据更改时得到通知。让我举个例子;假设用户开车旅行,在城市之间或沙漠中,您并不总是拥有3G或4G覆盖范围,用户希望在3或4G网络可用时得到通知。非常感谢您的时间,伙计,我一直收到>不幸,应用程序已停止java.lang.NullPointerException的红色部分android.app.ActivityThread.main(ActivityThread.java:5293)>java.lang.reflect.Method.invokenactive(本机方法),java.lang.reflect.Method.invoke(Method.java:515),com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)的dalvik.system.NativeStart.main(本机方法)<我还添加了权限,您提到的权限和>android.permission.ACCESS_rough_LOCATION<正如android Studio要求的那样…有什么想法吗?在
onCellInfoChanged
方法中,您会得到一个NullPointerException,我认为这是因为cellInfo为null。尝试添加一个if语句来检查cellInfo的nullity,看看是否为空解决您的问题。顺便问一下,您是在设备上还是在模拟器上运行它?我正在Note 3设备上运行它,该设备目前具有2G边缘覆盖率,使用TelephonyManager的getNetworkType方法,我可以获得“网络类型边缘”我可以在几个小时内带着我的设备开车兜风,到时候我会告诉你的。但是如果手机信息为空的话,这个应用程序应该可以工作。
public class TeleListener extends PhoneStateListener {  
    public void onDataConnectionStateChanged (int state, int networkType){
        super.onDataConnectionStateChanged(state, networkType);  
   //Whatever you wanna do  
      }  
}