广播与okhttp联网(实现联网就访问网络的功能)

来源:互联网 发布:儿童英语跟读软件 编辑:程序博客网 时间:2024/06/06 12:28

权限:

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
导入类库:

compile 'com.squareup.okhttp3:okhttp:3.4.1'
主要的代码:
public class MainActivity extends Activity {    NotificationManager notificationManager;    ConnectivityManager connectivityManager;    Notification.Builder builder;    int NETWORK = 0;    int NETWORK_UNKNOWN = 0;//无    int NETWORK_2g = 1;//2g    int NETWORK_3g = 2;//3g    int NETWORK_4g = 3;//4g    int NETWORK_wifi = 4;//wifi    TelephonyManager telephonyManager;    NetWork network;    TextView textView;    NetworkInfo networkInfo;    //    创建处理对象handler    Handler handler = new Handler() {        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case 0:                    textView.setText("联网失败");                    break;                case 1:                    String obj = (String) msg.obj;                    textView.setText(obj);                    break;                default:                    textView.setText("联网失败");                    break;            }        }    };    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(network);    }    //获取联网的状态    public int getNetworkState() {        switch (telephonyManager.getNetworkType()) {            case TelephonyManager.NETWORK_TYPE_GPRS:            case TelephonyManager.NETWORK_TYPE_EDGE:            case TelephonyManager.NETWORK_TYPE_CDMA:            case TelephonyManager.NETWORK_TYPE_1xRTT:            case TelephonyManager.NETWORK_TYPE_IDEN:                return NETWORK_2g;            case TelephonyManager.NETWORK_TYPE_UMTS:            case TelephonyManager.NETWORK_TYPE_EVDO_0:            case TelephonyManager.NETWORK_TYPE_EVDO_A:            case TelephonyManager.NETWORK_TYPE_HSDPA:            case TelephonyManager.NETWORK_TYPE_HSUPA:            case TelephonyManager.NETWORK_TYPE_HSPA:            case TelephonyManager.NETWORK_TYPE_EVDO_B:            case TelephonyManager.NETWORK_TYPE_EHRPD:            case TelephonyManager.NETWORK_TYPE_HSPAP:                return NETWORK_3g;            case TelephonyManager.NETWORK_TYPE_LTE:                return NETWORK_4g;            default:                return NETWORK_UNKNOWN;        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView = (TextView) findViewById(R.id.text1);        regNetReceiver();//注册一个广播        getNetWorkStatus();//获取联网的工作状态 连上则访问网络,否则    }    //注册一个广播    public void regNetReceiver() {        //动态注册广播        IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");        network = new NetWork();        registerReceiver(network, intentFilter);    }    //获取工作状态    public int getNetWorkStatus() {        if (networkInfo != null && networkInfo.isConnected()) {            int type = networkInfo.getType();            if (type == ConnectivityManager.TYPE_WIFI) {                NETWORK = NETWORK_wifi;            } else if (type == ConnectivityManager.TYPE_MOBILE) {                NETWORK = getNetworkState();            }        }        return NETWORK;    }    //联网    public void NetWork() {        OkHttpClient okHttpClient = new OkHttpClient();        Request request = new Request.Builder().url("https://www.baidu.com/").build();        okHttpClient.newCall(request).enqueue(new Callback() {            @Override//fail            public void onFailure(Call call, IOException e) {                handler.sendEmptyMessage(0);            }            @Override            public void onResponse(Call call, Response response) throws IOException {                Message msg = new Message();                msg.what = 1;                msg.obj = response.body().toString();//访问网络返回的数据                handler.sendMessage(msg);            }        });    }    class NetWork extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);            telephonyManager = (TelephonyManager) context.getSystemService(Context.TELECOM_SERVICE);            connectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            networkInfo = connectivityManager.getActiveNetworkInfo();            switch (getNetWorkStatus()) {                case 0:                    builder.setContentText("无网络链接");                    break;                case 1: case 2: case 3: case 4:                    NetWork();                    break;                default:                    builder.setContentText("无网络链接");                    break;            }        }    }}

如果觉得本文写得好,请点击一下方的赞

原创粉丝点击