Android实战简易教程<三十八>(模仿腾讯QQ的网络状态提示和设置功能实现)
来源:互联网 发布:酒店净利润算法 编辑:程序博客网 时间:2024/05/13 15:53
项目里要用到一个网络状态判断的功能,想到了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();
-
- }
-
-
-
-
-
-
- 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);
-
- }
-
- return flag;
- }
-
-
-
-
- private void setNetwork() {
- mBtnCheckNetWork.setVisibility(View.VISIBLE);
-
- }
-
-
-
-
- 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();
- }
-
- 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;
-
-
-
- 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的显示与否。
0 0