Java 检测网络的后台线程可用
我正在开发一个应用程序,它必须在网络可用时自动检测。我正在考虑在定时器的基础上运行后台线程来检测网络何时可用,这是正确的方法还是有任何标准的程序来检查它?Java 检测网络的后台线程可用,java,android,android-networking,Java,Android,Android Networking,我正在开发一个应用程序,它必须在网络可用时自动检测。我正在考虑在定时器的基础上运行后台线程来检测网络何时可用,这是正确的方法还是有任何标准的程序来检查它?您可以使用android.net.conn.CONNECTIVITY\u更改广播 you can use android.net.conn.CONNECTIVITY_CHANGE broadcast Add in your manifest <receiver android:name="com.exam
您可以使用android.net.conn.CONNECTIVITY\u更改广播
you can use android.net.conn.CONNECTIVITY_CHANGE broadcast
Add in your manifest
<receiver android:name="com.example.utils.CheckInternetConnection"
android:enabled="true" android:label="ConnectivityActionReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
public class CheckInternetConnection extends BroadcastReceiver {
@Override
public void onReceive(final Context arg0, Intent arg1) {
if (haveNetworkConnection(arg0)) {
//TODO iF INTERNET IS CONNECTED
}else{
//TODO iF INTERNET IS DISCONNECTED
}
}
private boolean haveNetworkConnection() {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
try {
android.net.ConnectivityManager cm = (android.net.ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
android.net.NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (android.net.NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return haveConnectedWifi || haveConnectedMobile;
}
}
加入你的清单
公共类CheckInternetConnection扩展广播接收器{
@凌驾
公共void onReceive(最终上下文arg0,意图arg1){
if(haveNetworkConnection(arg0)){
//如果已连接INTERNET,则要执行的操作
}否则{
//INTERNET断开连接时的TODO
}
}
私有布尔haveNetworkConnection(){
布尔值haveConnectedWifi=false;
布尔haveConnectedMobile=false;
试一试{
android.net.ConnectivityManager cm=(android.net.ConnectivityManager)context.getSystemService(context.CONNECTIVITY_服务);
android.net.NetworkInfo[]netInfo=cm.getAllNetworkInfo();
对于(android.net.NetworkInfo ni:netInfo){
if(ni.getTypeName().equalsIgnoreCase(“WIFI”))
如果(ni.isConnected())
haveConnectedWifi=true;
if(ni.getTypeName().equalsIgnoreCase(“移动”))
如果(ni.isConnected())
haveConnectedMobile=true;
}
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回haveConnectedWifi | | haveConnectedMobile;
}
}
你必须为此提供服务。谷歌有很多这样的例子。