Android服务检查互联网连接?

Adn*_*nan 10 android

我想创建一个Android服务,它会在断开连接并再次重新连接互联网时通知主要活动.我有以下检查互联网连接的功能:

private boolean haveInternet(){
        NetworkInfo info=(NetworkInfo)((ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

        if(info==null || !info.isConnected()){
            return false;
        }
        if(info.isRoaming()){
            //here is the roaming option you can change it if you want to disable internet while roaming, just return false
            return true;
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

但我想知道,如何在服务中使用它.

Fra*_*ita 28

服务专为长期运行任务而设计.你应该使用BroadcastReceiver:

这是我用来监视网络状态到我的主Activity的示例方法:

private void installListener() {

        if (broadcastReceiver == null) {

            broadcastReceiver = new BroadcastReceiver() {

                @Override
                public void onReceive(Context context, Intent intent) {

                    Bundle extras = intent.getExtras();

                    NetworkInfo info = (NetworkInfo) extras
                            .getParcelable("networkInfo");

                    State state = info.getState();
                    Log.d("InternalBroadcastReceiver", info.toString() + " "
                            + state.toString());

                    if (state == State.CONNECTED) {

                        onNetworkUp();

                    } else {

                        onNetworkDown();

                    }

                }
            };

            final IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            registerReceiver(broadcastReceiver, intentFilter);
        }
    }
Run Code Online (Sandbox Code Playgroud)

记得在onDestroy事件发生时调用unregisterReceiver

希望这有帮助.

  • 我正在使用它并且效果很好,但我想在课堂或听众中使用它。所以我可以在不止一项活动中使用它,但我想避免代码重复。这样做的正确方法是什么? (2认同)