项目里要用到一个网络状态判断的功能,想到了QQ的网络状态判断和设置功能,决定模仿一下。实现起来也很是容易,界面较丑,还望原谅。
1.MainActivity.java:
package com.example.networktest; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo.State; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private Button mBtnCheckNetWork; private ConnectivityManager manager; private ListView mLV; private ArrayAdapter<String> simpleAdapter; private String datas[] = { "1111111", "1111111", "1111111", "1111111", "1111111", "1111111", "1111111", "1111111", }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnCheckNetWork = (Button) findViewById(R.id.btn_network_status); simpleAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, datas); mLV = (ListView) findViewById(R.id.lv); mLV.setAdapter(simpleAdapter); mBtnCheckNetWork.setOnClickListener(this); checkNetworkState(); } /** * 检测网络是否连接 * * @return */ private boolean checkNetworkState() { boolean flag = false; // 得到网络连接信息 manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // 去进行判断网络是否连接 if (manager.getActiveNetworkInfo() != null) { flag = manager.getActiveNetworkInfo().isAvailable(); } if (!flag) { // 网络不可用 setNetwork(); } else { mBtnCheckNetWork.setVisibility(View.GONE); // isNetworkAvailable(); } return flag; } /** * 网络未连接时,显示button,跳到网络设置页面 */ private void setNetwork() { mBtnCheckNetWork.setVisibility(View.VISIBLE); } /** * 网络已经连接,然后去判断是wifi连接还是GPRS连接 设置一些自己的逻辑调用 */ private void isNetworkAvailable() { State gprs = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) .getState(); State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) .getState(); if (gprs == State.CONNECTED || gprs == State.CONNECTING) { Toast.makeText(this, "wifi is open! gprs", Toast.LENGTH_SHORT) .show(); } // 判断为wifi状态下才加载广告,如果是GPRS手机网络则不加载! if (wifi == State.CONNECTED || wifi == State.CONNECTING) { Toast.makeText(this, "wifi is open! wifi", Toast.LENGTH_SHORT) .show(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_network_status: Intent intent = null; /** * 判断手机系统的版本!如果API大于10 就是3.0+ 因为3.0以上的版本的设置和3.0以下的设置不一样,调用的方法不同 */ if (android.os.Build.VERSION.SDK_INT > 10) { intent = new Intent( android.provider.Settings.ACTION_WIFI_SETTINGS); } else { intent = new Intent(); ComponentName component = new ComponentName( "com.android.settings", "com.android.settings.WirelessSettings"); intent.setComponent(component); intent.setAction("android.intent.action.VIEW"); } startActivity(intent); break; default: break; } } @Override protected void onRestart() {//设置完成后返回到本页面要进行再次判断网络状态 super.onRestart(); checkNetworkState(); } }
2.activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:orientation="vertical" > <Button android:id="@+id/btn_network_status" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" android:drawableLeft="@drawable/warning" android:drawableRight="@drawable/arrow" android:paddingLeft="20dp" android:paddingRight="10dp" android:visibility="gone" android:text=" 世界上最遥远的距离就是没网。检查设置" android:textSize="12sp" /> <ListView android:id="@+id/lv" android:layout_height="match_parent" android:layout_width="match_parent"/> </LinearLayout>
3.注意配置权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
在没网的情况下运行实例:
点击上面的button,跳到网络设置页面:
设置完成后按返回键跳转到MainActivity:(Button键自动隐藏)
这里有一个问题就是假设进入MainActivity前有网络,而进入后没网络,就不好判断了。我们这里只是一个模拟,在具体项目中,你可以在每次进行网络请求之前都进行网络判断,可以根据网络状态通过Handler改变Button的显示与否。
喜欢的朋友关注下!多谢支持!
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-27 05:19:11