您的位置:首页 > 理论基础 > 计算机网络

广播与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;
}

}

}

}

如果觉得本文写得好,请点击一下方的赞
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐