我想开发一个应用程序保持与服务器的TCP连接一段时间(如一两分钟)但我必须考虑设备的IP已更改,因为客户端可能在此期间移动.所以我想知道我们如何确定Android设备是否已经改变其网络环境(从Wifi转为4G或反之亦然)特别是设备的公共IP由于任何网络环境已经改变而改变了?
谢谢
小智 5
在我看来,你想要的是一个接收连接变化广播的广播接收器.收到广播时,您可以确定设备是否已连接到网络,然后尝试与服务器建立TCP连接.当设备改变网络时,从Wifi到3g/4g或反之亦然,此接收器应接收广播.
以下是我用于此类用例的示例:
public class InternetStatusListener extends BroadcastReceiver {
private static final String TAG="INTERNET_STATUS";
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "network status changed");
if(InternetStatusListener.isOnline(context)){//check if the device has an Internet connection
//Start a service that will make your TCP Connection.
}
}
}
public static boolean isOnline(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助你.可能还有其他更好的方法,但这就是我使用的方法.
此外,您必须将这些添加到您的Android清单文件:
<receiver
android:name=".InternetStatusListener"
android:label="InternetStatusListener" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
<!-- Put these permissions too.-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |