无网络环境下的Android端数据传输
对于无网络的数据传输方式:
- NFC :适用于体量小指令数据传输,大数据量传输,速度较慢且不稳定,但是建立连接过程很快。
- WIFI直连:传输速度快,可传输数据量大,但是连接过程复杂。
- 蓝牙:常规的蓝牙区别于低功耗蓝牙(没有涉及),常规蓝牙需要发现设备,配对设备
- 热点TCP/IP方式
方式很多,就先记录下尝试过的一种吧:第四种方式
- 服务端创建网络
创建热点,这里采用的是反射机制调用系统的API方法,创建约定的名称的热点,创建成功之后会自动打开wifi热点
public boolean setWifiApEnabled() {
// disable WiFi in any case
//wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
mWifiManager.setWifiEnabled(false);
try {
//热点的配置类
WifiConfiguration apConfig = new WifiConfiguration();
//配置热点的名称(可以在名字后面加点随机数什么的)
apConfig.SSID = GlobData.WIFIAPSSID;
//配置热点的密码
apConfig.preSharedKey = GlobData.WIFIAPPASSWORD;
/***配置热点的其他信息 加密方式**/
apConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
apConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
//用WPA密码方式保护
apConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
//通过反射调用设置热点
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
//返回热点打开状态
return (Boolean) method.invoke(mWifiManager, apConfig, true);
} catch (Exception e) {
return false;
}
}
- 客户端连接网络
- 扫描附近的网络,添加广播接收网络变化及扫描结果
- 添加网络,当扫描结果包含已约定SSID的热点,则添加到WiFi列表
- 连接该网络网络,
/**
* 是否已连接指定wifi
*/
public boolean isConnected(String ssid) {
WifiI

最低0.47元/天 解锁文章
3820

被折叠的 条评论
为什么被折叠?



