Android 获取已连接的wifi android连接到你的wifi什么意思啊
转载
- 一个配置好的WiFi模块,他会不停的向周围发射Beacon帧,此帧包含了模块的一般信息。
- android app连接前待熟悉它的工作流程。它的工作流程是先建立一个wifiutil类对象,然后实例化,需要重写配置方法,初始化方法,连接方法,实例化对象WiFimanager和connectactivymanager,它们都是上下文context产生的,有专门的生成函数官网和github上一大堆。配置是非常重要的,你待说明它的加密方式,和ssid,Bssid,mac等等。然后通过一些官方的函数接口来WiFi连接。那么它到底是怎么从名称,密码,ip地址,端口号到建立Bind的呢?
- 首先,app待配置手机自己的WiFi模块,配置好之后就是连接模块,app连接时通过socket向WiFi模块根据ip地址端口号发送连接帧,WiFi模块的socket服务监听接受到这一帧信息,里面包含了密码,密码校验通过建立连接,启动连接管理。(正点原子的WiFi模块建立连接后2秒没有收到客户端的消息,会把客户端给踢下线,所以心跳帧就很重要)。这时你发送的数据都会被WiFi模块转发给它的控制模块。
- 连接上之后需要建立通信,而在android app中一般不会轮询,而是通过线程,线程发送协议帧。协议帧是按照选择自定义的。
//获取WiFi管理模块,获取WiFi连接模块,需要注册表声明网络权限和WiFi状态权限
public class wifi_util extends Activity{
private ConnectivityManager connectivityManager;
private WifiManager mWifiManager;
Context mcontext;
private ConnectivityManager.NetworkCallback networkcallback;
//构造函数
wifi_util(Context context){
this.mcontext=context;
//sdk版本大于Q,小于Q,方法为wifimanager.connect(wifiname,wifipwd);
this.connectivityManager = (ConnectivityManager)
mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
this.mWifiManager = (WifiManager) mContext.getSystemService(WIFI_SERVICE);
this.networkcallback=new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
Log.i(TAG, "onAvailable 切换到指定wifi成功");
//connectivityManager.unregisterNetworkCallback(networkCallback);
connectivityManager.bindProcessToNetwork(network);
}
@Override
public void onUnavailable() {
super.onUnavailable();
Log.i(TAG, "onUnavailable 切换到指定wifi失败");
connectivityManager.unregisterNetworkCallback(networkCallback);
}
};
}
//一个连接函数,
public void linktowifi(String wifiName,String wifiPwd){
//网络说明,它是谁
NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
.setSsid(wifiName)
.setWpa2Passphrase(wifiPwd)
.build();
Log.d(TAG, "changeToWifiAfterQ: "+wifiName+wifiPwd);
//打包网络请求
NetworkRequest request =
new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)//监听WiFi变化action
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)//允许应用程序在此网络上通信
.addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)//信任此网络
.setNetworkSpecifier(specifier)
.build();
//请连接,并绑定回调函数
connectivityManager.requestNetwork(request,networkcallback);
}
}
//需要字节流转成字符流,解包,如果需要告诉ui或者别的的可以用message
//上面只是连接网络,要接受发送数据还待有套接字
public void main(){
Socket socket=new Socket(ip,port);
OutputStream ops=new OutputStream();
InputStream ips=new InputStream();
Byte[] storgestr=new byte[1024];
int offset=0;
int rec_len=storgestr.length;
Byte[] send_buff=new byte[1024];
new Thread(()->{
ips.read(storgestr,offset,rec_len);
System.sleep(1000);
}).start();
new Thread(()->{
ops.write(send_buff);
System.sleep(1000);
}).start();
}
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。