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; } }
你必须为此提供服务。谷歌有很多这样的例子。