判断当前模拟器或手机的网络连接状况
主函数
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mTextView;
private Button mButtonDetail;
private ConnectivityManager mconnectivityManager;
private NetworkInfo networkInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textview_net_detail);
mButtonDetail = (Button) findViewById(R.id.button_net_detail);
mButtonDetail.setOnClickListener(this);
mconnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = mconnectivityManager.getActiveNetworkInfo();
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_net_detail:
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(MainActivity.this, "network is available", Toast.LENGTH_SHORT).show();
mTextView.setText("连接网络的方式为:" + networkInfo.getTypeName());
} else {
Toast.makeText(MainActivity.this, "network is unavailable", Toast.LENGTH_SHORT).show();
mTextView.setText("没有网络连接");
}
break;
}
}
布局
<TextView
android:id="@+id/textview_net_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button_net_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取网络详情"/>
总结:首先通过getSystemService()方法得到了ConnectionManager的实例,这是一个系统服务类,专门用于管理网络连接,然后调用它的getActiveNetworkInfo()方法可以得到NetworkInfo 的实例,接着调用NetworkInfo 的isAvailable()方法,即可以判断出当前是否有网络了。通过Toast的方式,对用户进行提示。在通过networkInfo.getTypeName()方法得到网络的具体连接方式。{ mTextView.setText(“连接网络的方式为:” + networkInfo.getTypeName());}
这里也必须加入权限
**<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>**
动态注册监听网络变化
要想知道当前网络的变化,还可以采用广播接收器来监听网络的变化,
主函数
public class MainActivity extends AppCompatActivity{
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter=new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver=new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
class NetworkChangeReceiver extends BroadcastReceiver{
private ConnectivityManager mconnectivityManager;
private NetworkInfo networkInfo;
@Override
public void onReceive(Context context, Intent intent) {
mconnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = mconnectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(MainActivity.this, "network is available", Toast.LENGTH_SHORT).show();
mTextView.setText("连接网络的方式为:" + networkInfo.getTypeName());
} else {
Toast.makeText(MainActivity.this, "network is unavailable", Toast.LENGTH_SHORT).show();
mTextView.setText("没有网络连接");
}
}
}
步骤总结
1、定义一个内部类NetworkChangeReceiver ,让它继承自BroadcastReceiver,并重写父类的onReceive()方法。
2、在onCreate()方法中,创建一个IntentFilter的实例,并给它添加一个值为android.net.conn.CONNECTIVITY_CHANGE的action,为什么要添加这个值呢?——我们的广播接收器想要监听什么广播,就在这里添加相应的action就行了。
3、创建一个NetworkChangeReceiver 的实例,然后调用registerReceiver()方法进行注册,将NetworkChangeReceiver 的实例和IntentFilter的实例都传进去。这样NetworkChangeReceiver 就会收到所有值为android.net.conn.CONNECTIVITY_CHANGE的广播,也实现了监听网络变化的功能,
4、最后一定要记得,动态注册的广播接收器一定要取消注册才行,这里我是在onDestroy()方法中通过调用unregisterReceiver()方法来实现的。