Androidはリアルタイムでネットワークの状態を監視できる

7503 ワード

まず簡単に考えてみましょう.ネットワークが変化すると、システムが放送します.だから私たちはこの放送を傍受して、インタフェースのコールバックを利用してactivityに相応の操作をするように通知すればいいです.
構想
  • ネットワークの状態を判断する(ツールクラスNetUtilを書く)
  • クラス継承BroadcastReceiver(インベントリファイルに登録することを忘れない)
  • を書く
  • インベントリファイルに権限を追加する必要がある
  • <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">uses-permission>
  • コールバックインタフェース(NetEvevt)
  • BaseActivityはこのインタフェース
  • を実現する
    ダイレクトコード
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    
    /**
     * Created by Hoban on 2017/11/15.
     */
    public class NetUtil {
    
        /**
         *       
         */
        public static final int NETWORK_NONE = -1;
        /**
         *     
         */
        public static final int NETWORK_MOBILE = 0;
        /**
         *     
         */
        public static final int NETWORK_WIFI = 1;
    
        public static int getNetWorkState(Context context) {
    
            //          
            ConnectivityManager connectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
    
            NetworkInfo activeNetworkInfo = connectivityManager
                    .getActiveNetworkInfo();
            if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
                if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {
                    return NETWORK_WIFI;
                } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {
                    return NETWORK_MOBILE;
                }
            } else {
                return NETWORK_NONE;
            }
            return NETWORK_NONE;
        }
    }
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.ConnectivityManager;
    
    /**
     * Created by Hoban on 2017/11/15.
     */
    
    public class NetBroadcastReceiver extends BroadcastReceiver {
        public NetEvevt evevt = BaseActivity.evevt;
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                int netWorkState = NetUtil.getNetWorkState(context);
                //             
                evevt.onNetChange(netWorkState);
            }
        }
    
        //      
        public interface NetEvevt {
            public void onNetChange(int netMobile);
        }
    }
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ListView;
    import android.widget.TextView;
    
    /**
     * Created by Hoban on 2017/11/15.
     */
    public class MainActivity extends BaseActivity {
    
        private TextView textView,txtView;
        ListView listView;  //    ListView  
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView= (TextView) findViewById(R.id.textView);
            txtView=(TextView)this.findViewById(R.id.txtView);
    
    
            //         
            boolean netConnect = this.isNetConnect();
            if (netConnect){
                textView.setVisibility(View.GONE);
                txtView.setText("      ");
            }else {
                textView.setVisibility(View.VISIBLE);
                txtView.setText("      ");
            }
        }
    
        @Override
        public void onNetChange(int netMobile) {
            super.onNetChange(netMobile);
            //          
            if (netMobile==NetUtil.NETWORK_NONE){
                textView.setVisibility(View.VISIBLE);
                txtView.setText("      ");
            }else {
                textView.setVisibility(View.GONE);
                txtView.setText("      ");
            }
        }
    
    }
    

    みんながDemoを参考にしてダウンロードするためにDemoをしました