小米开放平台双WiFi适配说明
1.双WIFI简介
双WiFi顾名思义提供了手机同时连接两个WiFi同时上网的能力,一般手机只能同时连接AP的一个WiFi频段获取 WiFi信号,而支持双WiFi技术的手机可以同时连接AP的两个频段(2.4Ghz或5GHz)获取WiFi信号(可以连接一个AP的两个频段,也可以连接两个AP的不同频段)。
1.1双WIFI的优点
- 提升网络稳定性:如果一路链路因为无线参数波动出现网络波动,可以通过另一链路及时将数据包发送出去;
- 提升网络速度:双WiFi提供了两条链路同时加载数据的能力,提升网络速度。
1.2目前小米支持双WiFi的已发布机型
小米10、小米10 Pro、Redmi K30 5G、Redmi K30 Pro。
1.3如何进入双WIFI UI操作界面
双WiFi UI操作界面可从手机如下操作路径:“设置->WLAN->WLAN助理->双WLAN加速”进入。该界面称为副WiFi界面,副WiFi界面的打开和连接与主WiFi除了频段差异外并无区别(当主WiFi连接5Ghz时,副WiFi只能连接2.4Ghz,反之主WiFi连接2.4Ghz的时候,副WiFi只能连接5Ghz)。如下图所示:
2.双WIFI接入
2.1双WIFI接入需求
- 判断当前机型是否支持双WiFi;
- 判断当前双WiFi是否已连接;
- 若未连接,作双WiFi的连接引导;
- 接入双WiFi 网络;
- 副WiFi相关的api。
2.2判断当前机型是否支持双WiFi
private boolean supportDualWifi(Context context) {
String cloudvalue = Settings.System.getString(context.getContentResolver(), "cloud_slave_wifi_support");
if ("off".equals(cloudvalue)) {
return false;
}
boolean support;
try {
support = context.getResources().getBoolean(
context.getResources().getIdentifier("config_slave_wifi_support", "bool", "android.miui"));
} catch (Exception exception) {
return false;
}
return support;
}
2.3判断当前双WIFI是否已连接
WiFi的api都属于系统api,有严格的权限校验,第三方应用无法直接调用。miui提供了workround判断方web生成app法,当副WiFi连接上了之后,如下参数会设置为对应的副WiFi的ssid,断开时则会清空,可依此判断当前副WiFi是否已连接。
private boolean isSlaveWifiConnected(Context context) {
String slaveWifiSsid = getDualWifiSsid(context);
if (slaveWifiSsid == null || slaveWifiSsid.isEmpty()){
return false;
} else {
return true;
}
}
private String getDualWifiSsid(Context context){
return Settings.System.getString(context.getContentResolver(), "slave_wifi_ssid");
}
2.4 若副WiFi未连接,则引导用户至副WiFi界面进行连接
判断当前副WiFi是否已连接,若未连接跳转到系统副WiFi界面引导用户连接,返回到当前界面则再次校验,校验成功后进行副WiFi网络操作。
if (!isSlaveWifiConnected(getApplicationContext())){
//TODO Provide Dual Wifi Ui guidance and reCheck
Intent intent = new Intent("android.settings.DUAL_WIFI.WIFI_SETTINGS");
startActivity(intent);
retu可以生成app的网页rn;
}
2.5接入双WiFi网络part 1/4
反射获取副WiFi的transport
private int getSlaveTransportType() {
int slaveTransportType = -1;
try {
Class networkCapabilitiesClass = Class.forName("android.net.NetworkCapabilities");
Field field = networkCapabilitiesClass.getField("TRANSPORT_SLAVE_WIFI");
slaveTransportType = (int) field.get(null);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return slaveTransportType;
}
2.6接入双WiFi网络part 2/4
初始化副WiFi对应的NetworkRequest
int slaveTransportType = getSlaveTransportType();
if (slaveTransportType < 0) {
return;
}
NetworkRequest nr = getNetworkRequestForType(slaveTransportType);
private NetworkRequest getNetworkRequestForType(int type) {
return new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(type).build();
}
2.7接入双WiFi网络part 3/4
初始化副WiFi所需的NetworkCallback
SlaveCallback slaveNetworkCallback = new SlaveCallback();
private class SlaveCallback extends ConnectivityManager.NetworkCallback {
@Override
public void onAvailable(Network network) {
Log.d(TAG, "Network available: " + network.toString());
Socket skS;
try {
InetAddress[] inetAddress = network.getAllByName("www.mi.com");
skS = network.getSocketFactory().createSocket("www.mi.com", 80);
} catch (IOException e) {
e.printStackTrace();
return;
}
Log.d(TAG, "skS = " + skS.toString());
}
}
2.8接入双WiFi网络part 4/4
请求副WiFi网络
ConnectivityManager cm = (ConnectivityManager) getApplicationContext().
getSystemService(Context.CONNECTIVITY_SERVICE);
cm.requestNetwork(nr, slaveNetworkCallback);
PS: manifest 添加 permission
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
2.9 api补充
副WiFi提供的api汇总,详见“小米双wifi接口列表v1.0”
3.补充说明
3.1系统支持
当打开“双WLAN加速”并且辅助WLAN连接时,系统可以自动分配连接到不同的WiFi链路。 应用开发者可以跟小米确认开发的APP是否已经被支持。 当前已支持 :
- 直播类:斗鱼,虎牙、企鹅电竞、抖音、快手、微视;
- 购物类:淘宝、天猫、京东、毒、唯品会、苏宁易购、阿里巴巴、有品、小米商城、拼多多、河马生鲜、 PP视频、咸鱼 ;
- 视频类:优酷、腾讯视频、哔哩哔哩、爱奇艺、影视大全、西瓜视频、芒果Tv,人人视频、搜狐视频、 电视家;
- 浏览器:UC浏览器、QQ浏览器、百度浏览器、搜狗、猎豹,搜狗搜索;
- 音乐类:网易云音乐、酷我、央视影音、咪咕音乐、酷狗、qq音乐 ;
- 休闲app、大准点评、知乎、最右、虎扑;
- 新闻类:今日头条、腾讯新闻、一点资讯、想看、新浪新闻;
- 其他:迅雷、58、汽车之家、懂车帝、乐视视频、链家、瓜子二手车、安居客。
3.2应用适配
推荐开发者参照本接入指南中的“双WiFi接入”章节和附带的demo对双WiFi进行应用的适配。双WiFi连接的情况下,系统可以在两个网卡之间对socket进行分配,对于多socket的情况,是有加速效果的。 但是这种有一个弊端,系统不知道APP的socket想被放到哪个网卡,是随机控制的,所以就可能出现跨运营商访问的情况。而应用自己做适配,应用可以自己控制数据传输到自己想传输的网卡上,这样就可以避免跨运营商访问的情况,更好地达到提升网络稳定性和数据加载速度的目的。
4.附件
- MiDemo下载链接:http://f3.market.xiaomi.com/download/MiPass/0560e4c565fe7ef69fd2a2256d7c61d18f94023d1/MiDemo.zip
- “小米双wifi接口列表v1.0”下载链接:http://f4.market.xiaomi.com/download/MiPass/036a45c2758ccbb709f58f5eefc4a6134f943e679/小米双wifi接口列表v1.0.xlsx
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/12502/
部分内容来自网络投稿,如有侵权联系立删