导航:首页 > 源码编译 > androidwifi定位源码

androidwifi定位源码

发布时间:2025-01-15 09:28:24

1. android开发如何使用代码配置手机wifi的pac地址

这里用到的手机型号为魅族M6120,其中的具体步骤如下:

1、打开手机的设置界面,需要选择无线网络这一项。

2. 【Android初级】如何正确获取WiFi列表

获取Android设备上的WiFi列表是一项常见的需求,但实现过程中需注意正确的步骤和方法。以下为简化版步骤,确保能获取到最新且准确的WiFi列表信息。

本地环境设定如下:

Android Studio版本:3.0.1;DEMO APK的Min SDK Version为API 23,Target SDK Version为API 24,Compile SDK Version为API 26;真机运行于Android 7.0系统。

获取WiFi列表的完整流程:

1. 开启WiFi并激活定位服务,确保设备能被正确识别和使用。

2. 在`onCreate`方法中动态申请`ACCESS_FINE_LOCATION`权限,以获取定位信息。

3. 同样在`onCreate`内注册广播接收器,以便在定位服务改变时接收通知。

4. 定义`mReceiver`类,并在布局文件中加入一个`Button`,以便触发WiFi扫描。

5. 在`AndroidManifest.xml`文件中声明`ACCESS_FINE_LOCATION`权限。

值得注意的是,申请权限的操作可能在`onCreate`中重复进行,这是因为Android系统可能在运行时才对应用权限进行检查,确保应用仅在实际需要时请求权限,而非仅在编译时声明。

实现过程中的常见误区:

一些开发者可能会在调用`startScan`方法后立刻调用`getScanResults`获取结果,但这会得到上一次扫描的WiFi列表,而非最新的信息。正确的做法是在接收器的`onReceive`方法中处理并获取扫描结果。

在实现过程中遇到任何问题或有不同见解,欢迎与我一起探讨,共享解决方案。

3. android manager wifi 怎么用

获取Wifi的控制类WifiManager。
WifiManager wm=(WifiManager)getSystemService(Context.WIFI_SERVICE);
接下来可以对wifi操作了,比如要打开、关闭wifi,可以通过WifiManager的setWifiEnabled()方法来开关wifi。
若要查看一些信息,可以通过getConnectionInfo()方法得到WifiInfo类的对象,WifiInfo类里主要提供手机wifi上面存储的连接信息。
WifiInfo类方法:
1、getBSSID() 获取接入点的mac地址(String)
2、getIpAddress() 获取本机的IP地址 (int)
3、getLinkSpeed() 获取连接速度(不是下载速度),单位为Mbps (int)
4、getMacAddress() 获取mac地址 (String)
5、getNetworkId() 获取网络id号。每一个设定好了的网络都有一个独一无二的整数型ID号,用来识别网络,当操作请求时(翻译)。简而言之,就是这个号就是代表一个连接点,手机可以通过wifi连接很多无线网的。
6、getRssi() 返回收到的信号强度,是个负数。(好像到-113就表示一点信号都没有,也就是说数越大信号就越好)
7、getSSID() 获取无线信号提供者的名称 (就是要连的网络的名字)(String)
上面那个类只能查到本机的mac地址与ip,要只查看本机的详细信息,可以通过这个类:DhcpInfo df=wm.getDhcpInfo();
DhcpInfo类没什么方法,提供了一些字段:
1、dns1 第一个DNS
2、dns2 如上
3、gateway 网关
4、ipAddress IP地址
5、netmask 子网掩码
6、serverAddress 服务端地址(其实就是路由器ip,和网关一样)
7、leaseDuration 和上面的getLinkSpeed() 方法的值接近,可能是连接速度,不过单位不是Mbps,getLinkSpeed() 得到72,这个字段的值是7200

上面的IP与网关、子网掩码等都是int型数值,直接看看不懂,附上一个我写的方法把int转成String类型。

private String intToString(int a){
StringBuffer sb=new StringBuffer();
int b=(a>>0)&0xff;
sb.append(b+".");
b=(a>>8)&0xff;
sb.append(b+".");
b=(a>>16)&0xff;
sb.append(b+".");
b=(a>>24)&0xff;
sb.append(b);
return sb.toString();
}

WifiConfiguration 类主要提供一个wifi配置的所有信息
有如下字段(自己明白的不一定正确):
BSSID 接入点的mac地址。
SSID 接入点的名字。
networkId 网络号
preSharedKey WPA-PSK密码,如果有就会得到一个*(这玩意就是判断是不是有密码的)
priority 优先级
status 连接状态,值是WifiConfiguration.Status中字段的一种。

WifiConfiguration.Status 提供了3个字段表示wifi连接的三种状态
1.CURRENT 值为0,表示处于连接状态
2.DISABLED 值为1,表示网络不可用
3. ENABLED 值为2,表示网络可用但没连接

ScanResult wifi扫描到的接入点信息
1.BSSID
2.SSID
3.capabilities
4.frequency
5.level

关于接收WIFI状态改变接收广播信息:

ACTION: WifiManager.WIFI_STATE_CHANGED_ACTION ( "android.net.wifi.WIFI_STATE_CHANGED")wifi状态变化触发,触发两次。

可接收两个信息:(键) (这个是监听wifi状态变化的,wifi状态变化并不包括wifi的连接状态,只是单纯的指示wifi的5种状态)

1. WifiManager.EXTRA_PREVIOUS_WIFI_STATE("previous_wifi_state") int型值 intent.getIntExtra("键",0);(第二个为得不到时的默认值)

2. WifiManager.EXTRA_WIFI_STATE("wifi_state") int型值 intent.getIntExtra("键",0);(第二个为得不到时的默认值)

ACTION: WifiManager.NETWORK_STATE_CHANGED_ACTION("android.net.wifi.STATE_CHANGE")wifi连接网络的状态广播,连接过程中接收多次,在连接过程中可与获取NetworkInfo对象,通过ni.getState()可以获取wifi连接状态。如果连接state处于connected状态,可以通过WifiManager.EXTRA_WIFI_INFO得到wifiInfo对象。(不重要细节:测试时发现 下面isconnected()方法为true时,这个广播还处于connecting状态,再一次广播才变成connected)

可接收两个信息:(键)

1. WifiManager.EXTRA_BSSID("bssid") String类型值 intent.getStringExtra("键")

2. WifiManager.EXTRA_NETWORK_INFO("networkInfo") T getParcelableExtra(“键”)

ACTION: WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION( "android.net.wifi.supplicant.CONNECTION_CHANGE") 判断是否WIFI打开了,变化触发一次

可接收一个信息:(键)(这个应该是广播wifi启动状态的,true表示连接到wifi设备,一般在wifi state处于enable时得到,false则表示断开设备连接,wifi此时状态为disabling。这只是指机器内的wifi连接状态变化,与网络无关)

1. WifiManager.EXTRA_SUPPLICANT_CONNECTED("connected") boolean类型返回值 intent.getBooleanExtra(“键”, true)第二个是默认值

ACTION: WifiManager.SUPPLICANT_STATE_CHANGED_ACTION("android.net.wifi.supplicant.STATE_CHANGE")发送WIFI连接的过程信息,如果出错ERROR信息才会收到。连接WIFI时触发,触发多次。

可接收两个信息:(键)

1. WifiManager.EXTRA_NEW_STATE("newState") intent.getParcelableExtra("键")

2. WifiManager.EXTRA_SUPPLICANT_ERROR("supplicantError") int型值 getIntExtra(“键”, int)

WIFI状态int值对应的状态:

WifiManager.WIFI_STATE_DISABLED ==1

WifiManager.WIFI_STATE_DISABLING ==0

WifiManager. WIFI_STATE_ENABLED==3

WifiManager. WIFI_STATE_ENABLING==2

WifiManager. WIFI_STATE_UNKNOWN==4

上面的是在有wifi的环境下测的,没在没WIFI的环境下测,不一定准,但差不多了。测试机型HTC G17。

如果在连接WIFI的过程中(Connecting),去连接网络地址(比如http://www..com)会得到找不到地址的异常,并且在8秒左右之内(就测了一台定制机),不能连接这一地址,否则报找不到地址异常。

这个包并不判断网络连接状态,只是判断wifi的各种状态,如果需要判断网络状态, 在android.net包中。ConnectivityManager 。

//判断WIFI是否连接
private boolean isConnected(Context context){
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
System.out.println(ni.getState());
System.out.println(ni.getDetailedState()+"-----");
if(ni != null && ni.getState()==State.CONNECTED)
return true;
return false;
}

private boolean isWifiConected(Context context) {
WifiManager wm = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration> list = wm.getConfiguredNetworks();
Iterator<WifiConfiguration> it = list.iterator();
while (it.hasNext()) {
WifiConfiguration wc = it.next();
if (wc.status == WifiConfiguration.Status.CURRENT)
return true;
}
return false;
}//2012.11.12在4.0机器上发现这个方法一直返回false,估计我理解错了,不要用。

WifiInfo不为空并不代表这个类里面就存了信息,getMacAdress可能为空。

public String getMac() {
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
if(wi == null)
return null;
return wi.getMacAddress();
}

阅读全文

与androidwifi定位源码相关的资料

热点内容
app购买是啥意思在哪里扣费 浏览:393
任意游服务器地址和密码 浏览:932
小学普法答题APP是哪个 浏览:377
页面置换算法的比较 浏览:624
程序员退休工资如何 浏览:787
socket编程recv 浏览:695
如何转行做程序员 浏览:532
怎么查询哪个app是哪个公司的 浏览:731
我的世界服务器地址怎么变成ip地址 浏览:33
不用时怎么加密电脑 浏览:56
不玩手机APP怎么开启警报 浏览:562
打开微信收付款加密 浏览:400
小度app怎么关闭看护助手 浏览:739
服务器方舟boss属性怎么调 浏览:345
acos系统终端命令 浏览:915
宁德云服务器最新行情 浏览:475
压缩性骨折五十天 浏览:656
如何在服务器里把方块替换 浏览:909
变频空调摘板用什么替代压缩机 浏览:46
怎么在苹果手机上玩安卓和平精英 浏览:237