
回复
@toc
在HarmonyOS 开发中,网络权限属于system_grant(系统授权)权限,可参照官方文档:system_grant系统授权权限列表,因此开发者在使用system_grant系统权限的时候不需要向用户二次申请,而只需要向系统声明即可正常使用相关权限。
同时,在用户使用APP时也不知道网络是否正常,那么就需要开发者在设计APP过程中添加相关功能来提升用户体验。
比如,用户所连接的网络不可用时,及时提醒用户,以免用户误以为是APP功能原因。
<br> 附:受限开发权限列表中的权限,通常不能够声明后直接使用,则可以弹窗形式向用户二次申请。
在“···src–> main”目录下的“moudule.json5”文件中添加以下内容
...
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
"usedScene": {
"when": "always"
}
},
{
"name": "ohos.permission.GET_NETWORK_INFO",
"usedScene": {
"when": "always"
}
}
]
...
NetWorkState():boolean{
try { // 获取当前网络连接
let netHandle = connection.getDefaultNetSync();
// 0-100 为系统预留的连接
if (!netHandle || netHandle.netId < 100) {
return false;
}
// 获取连接的属性
let netCapability = connection.getNetCapabilitiesSync(netHandle);
let cap = netCapability.networkCap;
if (!cap) {
return false;
}
for (let em of cap) {
if (connection.NetCap.NET_CAPABILITY_VALIDATED === em) {
return true;
}
}
} catch (e) {
let err = e as BusinessError;
console.info('get netInfo error :' + JSON.stringify(err));
}
return false;
}
基于主要功能代码,在开发过程中,开发者也可以将判断网络状态的方法封装起来放在公共模块中,供其他各个模块使用。
export class NetWorkStates{
//根据判断结果显示提示窗
CheckNetWorkState(){
if(this.NetWorkState()){
this.GetNetWorkStateTalk()
}else{
this.NoNetWorkStateTalk()
}
}
//判断网络连接
NetWorkState():boolean{
try {
// 获取当前网络连接
let netHandle = connection.getDefaultNetSync();
// 0-100 为系统预留的连接
if (!netHandle || netHandle.netId < 100) {
return false;
}
// 获取连接的属性
let netCapability = connection.getNetCapabilitiesSync(netHandle);
let cap = netCapability.networkCap;
if (!cap) {
return false;
}
for (let em of cap) {
if (connection.NetCap.NET_CAPABILITY_VALIDATED === em) {
return true;
}
}
} catch (e) {
let err = e as BusinessError;
console.info('get netInfo error :' + JSON.stringify(err));
}
return false;
}
GetNetWorkStateTalk(){
promptAction.showToast({
message: '网络连接正常',
duration: 1000,
bottom: 50
})
}
NoNetWorkStateTalk(){
promptAction.showToast({
message: '无法连接服务器,请检查网络连接',
duration: 1000,
bottom: 50
})
}
}