我正在尝试制作一个应用程序,既可以显示网络类型(2G、3G或4G)的状态,这是我使用TelephonyManager完成的,也可以在网络类型更改时通知用户。这是我遇到的问题,我如何监控网络类型并在它发生变化时得到通知?
您应该在这里找到网络更改的答案http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
编辑移动网络查看此答案。https://stackoverflow.com/a/21721139/1898809
这篇帖子:https://stackoverflow.com/a/17341777/1898809
你需要这样的东西:(记住这只适用于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
权限。
过了一段时间,这里有一个工作代码:
在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)