harmony 鸿蒙网络策略管理部件
网络策略管理部件
简介
网络策略管理提供一些限制网络的基础能力,包括蜂窝网络策略、休眠/省电模式策略、后台网络策略、重置网络策略等功能。
说明: 为了保证应用的运行效率,大部分API调用都是异步的,对于异步调用的API均提供了callback和Promise两种方式,以下示例均采用callback函数,更多方式可以查阅API参考。
基本概念
- 休眠模式:设备在不需要工作的时候把一些部件、外设关掉(进入低功耗模式),并限制部分应用对网络的访问。
- 省电模式:省电模式是系统里的一个开关,开启后会降低设备的性能,并限制部分应用对网络的访问。
- 省流量模式:即后台网络策略,对处于后台的使用计量网络的应用进行限制。
- 蜂窝网络:移动通信网络。
- 计量网络:设置了流量配额的电话卡网络、Wlan网络以及以太网。
约束
- 开发语言:C++ JS
- 系统:linux内核
- 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
场景介绍
网络策略管理的典型场景有:
- 设置计量网络配额/获取已经设置的计量网络策略
- 后台网络限制开关/获取后台网络限制状态/获取指定uid在后台状态下能否访问网络
- 设定指定uid访问计量网络的策略/获取指定uid访问计量网络的策略/获取设置了对应策略的uids
- 重置网络策略
- 判断uid能否访问计量/非计量网络
- 将对应uid从休眠白名单里添加、移除/获取休眠模式的白名单列表
- 将对应uid从省电白名单里添加、移除/获取省电模式的白名单列表
- 更新网络提醒策略
以下分别介绍具体开发方式。
接口说明
完整的JS API说明以及实例代码请参考:网络策略管理。
类型 | 接口 | 功能说明 |
---|---|---|
ohos.net.policy | function setBackgroundPolicy(isAllowed: boolean, callback: AsyncCallback<void>): void | 设置后台网络策略,使用callback方式作为异步方法 |
ohos.net.policy | function isBackgroundAllowed(callback: AsyncCallback<boolean>): void; | 获取后台网络策略,使用callback方式作为异步方法 |
ohos.net.policy | function setPolicyByUid(uid: number, policy: NetUidPolicy, callback: AsyncCallback<void>): void; | 设置对应uid应用的访问计量网络的策略,使用callback方式作为异步方法 |
ohos.net.policy | function getPolicyByUid(uid: number, callback: AsyncCallback<NetUidPolicy>): void; | 通过应用uid获取策略,使用callback方式作为异步方法 |
ohos.net.policy | function getUidsByPolicy(policy: NetUidPolicy, callback: AsyncCallback<Array<number>>): void; | 通过策略获取设置这一策略的应用uid数组,使用callback方式作为异步方法 |
ohos.net.policy | function getNetQuotaPolicies(callback: AsyncCallback<Array<NetQuotaPolicy>>): void; | 获取计量网络策略,使用callback方式作为异步方法 |
ohos.net.policy | function setNetQuotaPolicies(quotaPolicies: Array<NetQuotaPolicy>, callback: AsyncCallback<void>): void; | 设置计量网络策略,使用callback方式作为异步方法 |
ohos.net.policy | function restoreAllPolicies(iccid: string, callback: AsyncCallback<void>): void; | 重置对应sim卡id的蜂窝网络、后台网络策略、防火墙策略、应用对应的策略,使用callback方式作为异步方法 |
ohos.net.policy | function isUidNetAllowed(uid: number, isMetered: boolean, callback: AsyncCallback<boolean>): void; | 获取对应uid能否访问计量或非计量网络,使用callback方式作为异步方法 |
ohos.net.policy | function isUidNetAllowed(uid: number, iface: string, callback: AsyncCallback<boolean>): void; | 获取对应uid能否访问指定的iface的网络,使用callback方式作为异步方法 |
ohos.net.policy | function setDeviceIdleAllowList(uid: number, isAllowed: boolean, callback: AsyncCallback<void>): void; | 设置指定uid应用是否在休眠防火墙的白名单,使用callback方式作为异步方法 |
ohos.net.policy | function getDeviceIdleAllowList(callback: AsyncCallback<Array<number>>): void; | 获取休眠模式白名单所包含的uid数组,使用callback方式作为异步方法 |
ohos.net.policy | function getBackgroundPolicyByUid(uid: number, callback: AsyncCallback<NetBackgroundPolicy>): void; | 获取指定uid能否访问后台网络,使用callback方式作为异步方法 |
ohos.net.policy | function resetPolicies(iccid: string, callback: AsyncCallback<void>): void; | 重置对应sim卡id的蜂窝网络、后台网络策略、防火墙策略、应用对应的策略,使用callback方式作为异步方法 |
ohos.net.policy | function updateRemindPolicy(netType: NetBearType, iccid: string, remindType: RemindType, callback: AsyncCallback<void>): void; | 更新提醒策略,使用callback方式作为异步方法 |
ohos.net.policy | function setPowerSaveAllowList(uid: number, isAllowed: boolean, callback: AsyncCallback<void>): void; | 设置指定uid应用是否在省电防火墙的白名单,使用callback方式作为异步方法 |
ohos.net.policy | function getPowerSaveAllowList(callback: AsyncCallback<Array<number>>): void; | 获取省电模式白名单所包含的uid数组,使用callback方式作为异步方法 |
ohos.net.policy | function on(type: “netUidPolicyChange”, callback: Callback<{ uid: number, policy: NetUidPolicy }>): void; | 订阅policy发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function off(type: “netUidPolicyChange”, callback: Callback<{ uid: number, policy: NetUidPolicy }>): void; | 取消订阅policy发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function on(type: “netUidRuleChange”, callback: Callback<{ uid: number, rule: NetUidRule }>): void; | 订阅rule发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function off(type: “netUidRuleChange”, callback: Callback<{ uid: number, rule: NetUidRule }>): void; | 取消订阅rule发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function on(type: “netMeteredIfacesChange”, callback: Callback<Array<string>>): void; | 订阅计量iface发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function off(type: “netMeteredIfacesChange”, callback: Callback<Array<string>>): void; | 取消订阅计量iface发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function on(type: “netQuotaPolicyChange”, callback: Callback<Array<NetQuotaPolicy>>): void; | 订阅计量网络策略发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function off(type: “netQuotaPolicyChange”, callback: Callback<Array<NetQuotaPolicy>>): void; | 取消订阅计量网络策略发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function on(type: “netBackgroundPolicyChange”, callback: Callback<boolean>): void; | 订阅后台网络策略发生改变时的回调,使用callback方式作为异步方法 |
ohos.net.policy | function off(type: “netBackgroundPolicyChange”, callback: Callback<boolean>): void; | 取消订阅后台网络策略发生改变时的回调,使用callback方式作为异步方法 |
设置计量网络配额/获取已经设置的计量网络策略
从@ohos.net.policy.d.ts中导入policy命名空间。
调用setNetQuotaPolicies方法,设置计量网络策略。
调用getNetQuotaPolicies方法,获取计量网络策略。
// 引入包名
import policy from '@ohos.net.policy';
addNetQuotaPolicy(){
let param = {
// netType值详见 [NetBearType](../reference/apis/js-apis-net-connection.md#netbeartype)
netType:Number.parseInt(this.netType),
// 计量蜂窝网络的SIM卡的标识值。以太网,wifi网络不会用到
iccid:this.iccid,
// 计量蜂窝网络中配合iccid联合使用。以太网,wifi网络单独使用。用于标记类型
ident:this.ident,
// 计量开始时间。例如M1、D1、Y1等
periodDuration:this.periodDuration,
// 发出警告的流量阈值 大于0的整数即可
warningBytes:Number.parseInt(this.warningBytes),
// 流量设置的配额 大于0的整数即可
limitBytes:Number.parseInt(this.limitBytes),
// 是否为计量网络 true为计量网络 false为非计量网络
metered:Boolean(Number.parseInt(this.metered)),https://gitee.com/openharmony/docs/pulls/14404
// 到达流量限制后的动作 详见[LimitAction](https://www.seaxiang.com/blog/b424712ab0604a189916f239ccf9d2d5#limitaction)
limitAction:Number.parseInt(this.limitAction)
};
this.netQuotaPolicyList.push(param);
},
// 订阅计量网络iface发生改变时的回调
policy.on('netMeteredIfacesChange', (data) => {
this.log('on netMeteredIfacesChange:' + JSON.stringify(data));
});
// 订阅计量网络策略发生改变时的回调
policy.on('netQuotaPolicyChange', (data) => {
this.log('on netQuotaPolicyChange:' + JSON.stringify(data));
});
// 调用setNetQuotaPolicies方法,设置计量网络策略
setNetQuotaPolicies(){
this.dialogType = DialogType.HIDE;
policy.setNetQuotaPolicies(this.netQuotaPolicyList, (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data));
});
},
// 调用getNetQuotaPolicies方法,获取计量网络策略
getNetQuotaPolicies(){
policy.getNetQuotaPolicies((err, data) => {
this.callBack(err, data);
if(data){
this.netQuotaPolicyList = data;
}
});
},
// 取消订阅计量网络iface发生改变时的回调
policy.off('netMeteredIfacesChange', (data) => {
this.log('off netMeteredIfacesChange:' + JSON.stringify(data));
});
// 取消订阅计量网络策略发生改变时的回调
policy.off('netQuotaPolicyChange', (data) => {
this.log('off netQuotaPolicyChange:' + JSON.stringify(data));
});
后台网络限制开关/获取后台网络限制状态/获取指定uid在后台状态下能否访问网络
开发步骤
从@ohos.net.policy.d.ts中导入policy命名空间。
调用setBackgroundAllowed方法,设置开启后台省流量或关闭后台省流量。
调用isBackgroundAllowed方法,获取后台网络限制状态(省流量)是开启还是关闭。
调用getBackgroundPolicyByUid方法,获取指定uid在后台状态下能否访问网络。
// 引入包名
import policy from '@ohos.net.policy'
// 订阅后台网络策略发生改变时的回调
policy.on('netBackgroundPolicyChange', (data) => {
this.log('on netBackgroundPolicyChange:' + JSON.stringify(data));
});
// 调用setBackgroundAllowed方法,设置开启后台省流量或关闭后台省流量
setBackgroundAllowed() {
policy.setBackgroundAllowed(Boolean(Number.parseInt(this.isBoolean)), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
// 调用isBackgroundAllowed方法,获取后台网络限制状态(省流量)是开启还是关闭。
isBackgroundAllowed() {
policy.isBackgroundAllowed((err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
// 调用getBackgroundPolicyByUid方法,获取指定uid在后台状态下能否访问网络。
getBackgroundPolicyByUid() {
policy.getBackgroundPolicyByUid(Number.parseInt(this.firstParam), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
// 取消订阅后台网络策略发生改变时的回调
policy.off('netBackgroundPolicyChange', (data) => {
this.log('off netBackgroundPolicyChange:' + JSON.stringify(data));
});
设定指定uid访问计量网络的策略/获取指定uid访问计量网络的策略/获取设置了对应策略的uids
开发步骤
从@ohos.net.policy.d.ts中导入policy命名空间。
调用setPolicyByUid方法,设置指定uid是否可以访问后台网络。
调用getPolicyByUid方法,获取指定uid的策略。
调用getUidsByPolicy方法,获取使用指定策略的uids。
// 引入包名
import policy from '@ohos.net.policy'
// 订阅uid的policy发生改变时的回调
policy.on('netUidPolicyChange', (data) => {
this.log('on netUidPolicyChange:' + JSON.stringify(data));
});
// 订阅uid的rule发生改变时的回调
policy.on('netUidRuleChange', (data) => {
this.log('on netUidRuleChange:' + JSON.stringify(data));
});
// 调用setPolicyByUid方法,设置指定uid是否可以访问后台网络
setPolicyByUid() {
let param = {
uid: Number.parseInt(this.firstParam), policy: Number.parseInt(this.currentNetUidPolicy)
}
policy.setPolicyByUid(Number.parseInt(this.firstParam), Number.parseInt(this.currentNetUidPolicy), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
// 调用getPolicyByUid方法,获取指定uid的策略
getPolicyByUid() {
policy.getPolicyByUid(Number.parseInt(this.firstParam), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
// 调用getUidsByPolicy方法,获取使用指定策略的uids
getUidsByPolicy(){
policy.getUidsByPolicy(Number.parseInt(this.currentNetUidPolicy), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
// 取消订阅uid的policy发生改变时的回调
policy.off('netUidPolicyChange', (data) => {
this.log('off netUidPolicyChange:' + JSON.stringify(data));
});
// 取消订阅uid的rule发生改变时的回调
policy.off('netUidRuleChange', (data) => {
this.log('off netUidRuleChange:' + JSON.stringify(data));
});
重置网络策略
开发步骤
从@ohos.net.policy.d.ts中导入policy命名空间。
调用restoreAllPolicies方法,重置网络策略。
// 引入包名
import policy from '@ohos.net.policy'
// 调用restoreAllPolicies方法,重置网络策略
restoreAllPolicies(){
policy.restoreAllPolicies(this.firstParam, (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
判断uid能否访问计量/非计量网络
开发步骤
从@ohos.net.policy.d.ts中导入policy命名空间。
调用isUidNetAllowed方法,获取uid能否访问计量/非计量网络。
// 引入包名
import policy from '@ohos.net.policy'
// 调用isUidNetAllowed方法,获取uid能否访问计量/非计量网络
isUidNetAllowedIsMetered(){
let param = {
uid: Number.parseInt(this.firstParam), isMetered: Boolean(Number.parseInt(this.isBoolean))
}
policy.isUidNetAllowed(Number.parseInt(this.firstParam), Boolean(Number.parseInt(this.isBoolean)), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
将对应uid从休眠白名单里添加、移除/获取休眠模式的白名单列表
开发步骤
从@ohos.net.policy.d.ts中导入policy命名空间。
调用setDeviceIdleAllowList方法,设置uid是否添加到休眠模式白名单。
调用getDeviceIdleAllowList方法,获取添加在休眠模式白名单的uids。
// 引入包名
import policy from '@ohos.net.policy'
// 调用setDeviceIdleAllowList方法,设置uid是否添加到休眠模式白名单
setDeviceIdleAllowList(){
let param = {
uid: Number.parseInt(this.firstParam), isAllowed: Boolean(Number.parseInt(this.isBoolean))
}
policy.setDeviceIdleAllowList(Number.parseInt(this.firstParam), Boolean(Number.parseInt(this.isBoolean)), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
// 调用getDeviceIdleAllowList方法,获取添加在休眠模式白名单的uids
getDeviceIdleAllowList(){
policy.getDeviceIdleAllowList((err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
将对应uid从省电白名单里添加、移除/获取省电模式的白名单列表
开发步骤
- 从@ohos.net.policy.d.ts中导入policy命名空间。
- 调用setPowerSaveAllowList方法,设置uid是否添加到省电模式白名单。
- 调用getPowerSaveAllowList方法,获取添加在省电模式白名单的uids。
// 引入包名
import policy from '@ohos.net.policy'
// 调用setPowerSaveAllowList方法,设置uid是否添加到省电模式白名单
setPowerSaveAllowList(){
let param = {
uid: Number.parseInt(this.firstParam), isAllowed: Boolean(Number.parseInt(this.isBoolean))
}
policy.setPowerSaveAllowList(Number.parseInt(this.firstParam), Boolean(Number.parseInt(this.isBoolean)), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
// 调用getPowerSaveAllowList方法,获取添加在省电模式白名单的uids
getPowerSaveAllowList(){
policy.getPowerSaveAllowList((err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
更新网络提醒策略
开发步骤
从@ohos.net.policy.d.ts中导入policy命名空间。
调用updateRemindPolicy,更新网络提醒策略。
// 引入包名
import policy from '@ohos.net.policy'
// 调用updateRemindPolicy,更新网络提醒策略
updateRemindPolicy() {
let param = {
netType: Number.parseInt(this.netType), iccid: this.firstParam, remindType: this.currentRemindType
}
policy.updateRemindPolicy(Number.parseInt(this.netType), this.firstParam, Number.parseInt(this.currentRemindType), (err, data) => {
console.log(JSON.stringify(err));
console.log(JSON.stringify(data))
});
},
你可能感兴趣的鸿蒙文章
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦