搬-Android - Wi-Fi Tutorial[转]

http://www.tutorialspoint.com/android/android_wi_fi.htm

Android allows applications to access to view the access the state of the wireless connections at very low level. Application can access almost all the information of a wifi connection.

The information that an application can access includes connected network‘s link speed,IP address, negotiation state(协商状态), other networks information. Applications can also scan, add, save, terminate and initiate Wi-Fi connections.

Android provides WifiManager API to manage all aspects(方面) of WIFI connectivity. We can instantiate this class by calling getSystemService method. Its syntax is given below −

WifiManager mainWifiObj;
mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);

In order to scan a list of wireless networks, you also need to register your BroadcastReceiver. It can be registered using registerReceiver method with argument of your receiver class object. Its syntax is given below −

lass WifiScanReceiver extends BroadcastReceiver {
   public void onReceive(Context c, Intent intent) {
   }
}
WifiScanReceiver wifiReciever = new WifiScanReceiver();
registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));  

The wifi scan can be start by calling the startScan method of the WifiManager class. This method returns a list of ScanResult objects. You can access any object by calling the get method of list. Its syntax is given below −

List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
String data = wifiScanList.get(0).toString();

一般情况下网路环境不怎么变,尽量减少wifi扫描的次数,我自己写程序的时候发现每次扫描的时候要10秒左右才能完成。。。

另外,有的手机 WIFI断开的时候会触发WIFI scan。

下面是一个修改过的WIFI riceiver,利用handler传播消息

package com.example.longer3d.wifi;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.NetworkInfo;
import android.net.wifi.SupplicantState;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.util.Log;

public class WifiStatusReceiver extends BroadcastReceiver {

    /**
     * wifi连接成功
     */
    public static final int WIFI_HANDLER_CONNECT_SUCCESS = 0x101;
    /**
     * wifi连接失败
     */
    public static final int WIFI_HANDLER_CONNECT_FAILD = 0x102;
    /**
     * wifi连接失败,密码错误,但是只是偶尔会捕抓到=_=..
     */
    public static final int WIFI_HANDLER_CONNECT_FAILD_AUTH = 0x103;

    private Handler handler;

    public WifiStatusReceiver(Handler handler) {
        this.handler = handler;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        switch (action) {
        case WifiManager.SUPPLICANT_STATE_CHANGED_ACTION:
            //
            // 查看源码SupplicantStateTracker.java
            //
            SupplicantState supl_state = ((SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE));
            if (supl_state == SupplicantState.COMPLETED) {
                // 添加回调
                handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_SUCCESS);
                Log.e("SupplicantState", "wifi COMPLETED");
            } else if (supl_state == SupplicantState.DISCONNECTED) {
                handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_FAILD);
                Log.e("SupplicantState", "wifi DISCONNECTED");
            } else {
                Log.e("SupplicantState", String.valueOf(supl_state));
                Log.e("SupplicantState", "wifi Unknown");
            }

            if (intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR)) {
                handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_FAILD_AUTH);
                Log.e("SupplicantState", "WIFI验证失败!");
            }
            break;

        // wifi连接上与否
        // 会调用的比较快,和多次,不知道为什么,先不使用
        case WifiManager.NETWORK_STATE_CHANGED_ACTION:
            // Log.e("receiver", "网络状态改变");
            NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) {
                // handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_FAILD);
                Log.e("receiver", "wifi网络连接断开");
            } else if (info.getState().equals(NetworkInfo.State.CONNECTED)) {
                // 获取当前wifi名称
                WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                Log.e("receiver", "连接到网络 " + wifiInfo.getSSID());
                // 添加回调
                // handler.sendEmptyMessage(WIFI_HANDLER_CONNECT_SUCCESS);
            }
            break;
        // wifi打开与否
        case WifiManager.WIFI_STATE_CHANGED_ACTION:
            int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED);
            if (wifiState == WifiManager.WIFI_STATE_DISABLED) {
                Log.e("receiver", "系统关闭wifi");
            } else if (wifiState == WifiManager.WIFI_STATE_ENABLED) {
                Log.e("receiver", "系统开启wifi");
            }
            break;
        }
    }
}
时间: 2024-10-09 02:22:57

搬-Android - Wi-Fi Tutorial[转]的相关文章

《Android开发从入门到精通》扶松柏.扫描版.pdf

下载地址:网盘下载 内容简介 编辑 <Android开发从入门到精通>系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK.开发流程以及常用的API等.书中以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践.<Android开发从入门到精通>是一本内容翔实,理论实践紧密结合的教程. [1] 目录 编辑 第1章 走进Android世界 1.1 智能手机飞速发展 1.1.1 主流手机系统介绍 1.1.2 Android横空出世 1.2 And

【Android】 Android-wifi 直连 wifi direct wifi p2p

现在,Android的支持Wi -Fi的直接点对点点对点(P2P)Android系统的供电设备和其他类型的设备,没有一个热点或互联网连接之间的连接.Android框架提供了一套Wi - Fi的P2P的API,允许你去发现和连接到其他设备时,每个设备的Wi -Fi的直接支持,然后沟通跨越距离远远长于蓝牙连接迅速??连接. android.net.wifi.p2p,一个新的软件包,包含所有的API执行同行等连接与Wi - Fi. 你需要与主类是WifiP2pManager,您可以调用getSyste

Android 外部启动activity,自定义action,action常量大全

从任意app,启动另外一个app的activity: 1.   Intent i = new Intent(); ComponentName cn = new ComponentName("com.book.android2",  "com.book.android2.AndroidSearch"); i.setComponent(cn); i.setAction("android.intent.action.MAIN"); startActiv

[android开发篇][ wifi模块] [2] wifibase

package com.softwinner.network.wifi; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration;

Android之4.0新特性

Android 4.0 平台 API等级:14  Android 4.0 是一次重要的平台发布版,为用户和应用程序开发者增加了大量的新特性.在下面我们将讨论的所有新特性和API中,因为它将 Android 3.x 版本中广泛使用的API和全息图像主题带给了小屏幕设备,因此我们说 Android 4.0 是一次重要的平台发布版.作为一名开发者,现在你拥有了单一的平台和统一的 API 框架,使你可以开发,并通过一个APK 来发布你的应用程序,并且可以为运行相同版本 Android(Android 4

[Android开发从入门到精通].扶松柏pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介编辑<Android开发从入门到精通>系统讲解了Android软件开发的基础知识,图文并茂地帮助读者学习和掌握SDK.开发流程以及常用的API等.书中以讲述实战实例为导向,用一个个典型应用生动地引领读者进行项目开发实践.<Android开发从入门到精通>是一本内容翔实,理论实践紧密结合的教程.[1] 目录编辑第1章 走进Android世界 1.1 智能手机飞速发展 1.1.1 主流手机系统介绍 1.1.2 Android横空出世 1.

Android自动化测试探索(四)uiautomator2简介和使用

uiautomator2简介 项目Git地址: https://github.com/openatx/uiautomator2 安装 #1. 安装 uiautomator2 使用pip进行安装, 注意因为uiaotumator2还在开发中需要加上--pre来安装最新的版本 pip install --upgrade --pre uiautomator2 也可以使用源码来进行安装 git clone https://github.com/openatx/uiautomator2 pip insta

Android学习笔记(二二): 多页显示-Tag的使用

在手机屏幕中,Tab也是比较常用的,通常和List结合,例如我们手机的通信录.下面是Tag的结构. TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout.TabWidget就是每个tab的标签,FrameLayout则是tab内容. 如果我们使用extends TabAcitivty,如同ListActivity,TabHost必须设置为@android:id/tabhost TabWidget必须设置android:id为@android:id/tabs F

【转】Android源代码编译命令m/mm/mmm/make分析--不错

原文网址:http://blog.csdn.net/luoshengyang/article/details/19023609 在前文中,我们分析了Android编译环境的初始化过程.Android编译环境初始化完成后,我们就可以用m/mm/mmm/make命令编译源代码了.当然,这要求每一个模块都有一个Android.mk文件.Android.mk实际上是一个Makefile脚本,用来描述模块编译信息.Android编译系统通过整合Android.mk文件完成编译过程.本文就对Android源