广播与okhttp联网(实现联网就访问网络的功能)
2017-07-16 21:19
375 查看
权限:
导入类库:
如果觉得本文写得好,请点击一下方的赞
<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; } } } }
如果觉得本文写得好,请点击一下方的赞
相关文章推荐
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- 访问网络----OkHttp完全解析 是时候来了解OkHttp了
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Android 访问网络框架之——OkHttp框架的解析
- 无NAT功能三层交换网络中利用远程与路由访问服务实现外网连接
- 实现IHttpModule接口获取Session来实现页面访问日志功能。
- android访问网络--okhttp
- Android_OkHttp+Picasso+RecyclerView实现网络图片下载瀑布流
- 实现IHttpModule接口获取Session来实现页面访问日志功能。
- 通过DNS实现DVR的网络访问功能
- 最简单配置方法!无线网络联网状态下 VirtualBox实现Window主机与虚拟机互相访问
- 工具类:HttpURLConnHelper(实现网络访问文件,将获取到数据储存在文件流中)
- 源码编译apache实现CGI,虚拟主机,httpds安全访问,status服务状态信息,压缩等功能。
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- 通过DNS实现DVR的网络访问功能
- 基于OkHttpUtils自己实现一个检查升级软件功能
- 使用Apache HttpClient访问网络(实现手机端注册,服务器返回信息)
- Android中使用HttpURLConnection和HttpClient实现GET和POST请求访问网络
- 使用server发送广播给activity实现网络延迟功能
- HttpClient实现网络访问详解