问题现象
手机开启移动网络,并连接到Wi-Fi网络后,当三方应用拉起系统浏览器时,如何指定浏览器通过Wi-Fi网络加载网页。
解决方案
- 在module.json5文件中申请允许应用获取数据网络信息的权限:ohos.permission.GET_NETWORK_INFO。
- 使用connection.getAllNets方法获取连接状态的网络列表,并使用connection.getNetCapabilities方法判断是否有Wi-Fi的netId,若存在Wi-Fi的netId,在应用拉起系统浏览器时,可通过parameters参数传递Wi-Fi网络的netId,并设置action,entities及abilityName参数,传递的uri为探测地址。
import { common, Want } from '@kit.AbilityKit';
import { connection } from '@kit.NetworkKit';
@Entry
@Component
struct NetPage {
build() {
RelativeContainer() {
Button('拉起浏览器')
.fontWeight(FontWeight.Bold)
.alignRules({
middle: { anchor: '__container__', align: HorizontalAlign.Center },
center: { anchor: '__container__', align: VerticalAlign.Center }
})
.onClick(() => {
let netId = 0;
// 获取已连接的网络列表
let netHandle = connection.getAllNetsSync();
netHandle.forEach(item => {
// 判断是否为Wi-Fi网络
if (connection.getNetCapabilitiesSync(item).bearerTypes[0] === 1) {
netId = item.netId;
}
});
try {
let want: Want = {
// action设置为ohos.want.action.awc或ohos.want.action.viewData
action: 'ohos.want.action.awc',
bundleName: 'com.huawei.hmos.browser',
entities: ['entity.browser.hbct'],
abilityName: 'CustomTabAbility',
// 此处地址实际使用过程中替换为真实地址
uri: 'xx.xx.xx',
// 传递netId
parameters: {
'netId': netId
}
};
let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
context.startAbility(want);
console.info(`explicit start ability succeed`);
} catch (error) {
console.error(`explicit start ability failed with ${error.code}`);
}
})
}
.height('100%')
.width('100%')
}
} 常见FAQ
Q:如何指定拉起系统浏览器时打开的网页?
A:Want对象的uri属性即要打开的网页链接。