• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 网络共享(仅对系统应用开放)
2<!--Kit: Network Kit-->
3<!--Subsystem: Communication-->
4<!--Owner: @wmyao_mm-->
5<!--Designer: @guo-min_net-->
6<!--Tester: @tongxilin-->
7<!--Adviser: @zhang_yixin13-->
8
9## 简介
10
11网络共享管理分享设备已有网络给其他连接设备,支持 Wi-Fi 热点共享、蓝牙共享和 USB 共享,同时提供网络共享状态、共享流量查询功能。
12
13> **说明:**
14> 为了保证应用的运行效率,大部分 API 调用都是异步的,对于异步调用的 API 均提供了 callback 和 Promise 两种方式,以下示例均采用 promise 函数,更多方式可以查阅[API 参考](../reference/apis-network-kit/js-apis-net-sharing-sys.md)。
15
16## 基本概念
17
18- WIFI 共享:通过 WIFI 热点共享网络。
19- 蓝牙共享:通过蓝牙共享网络。
20- USB 共享:通过 USB 共享网络。
21
22## 约束
23
24- 开发语言:JS
25- 本模块首批接口从 API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
26
27## 场景介绍
28
29网络共享的典型场景有:
30
31- 开启网络共享
32- 停止网络共享
33- 获取共享网络的数据流量
34
35以下分别介绍具体开发方式。
36
37## 接口说明
38
39完整的 JS API 说明以及实例代码请参考:[网络共享](../reference/apis-network-kit/js-apis-net-sharing-sys.md)。
40
41| 接口名                                                                   | 描述                                                                                                    |
42| --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
43| isSharingSupported(callback: AsyncCallback\<boolean>): void;    | 获取当前系统是否支持网络共享,使用 callback 方式作为异步方法。                                                       |
44| isSharing(callback: AsyncCallback\<boolean>): void;             | 获取当前共享状态,使用 callback 方式作为异步方法。                                                                   |
45| startSharing(type: SharingIfaceType, callback: AsyncCallback\<void>): void;  | 开启共享,type 为共享类型,目前支持 Wifi 热点、蓝牙、USB,使用 callback 方式作为异步方法。                |
46| stopSharing(type: SharingIfaceType, callback: AsyncCallback\<void>): void;  | 停止指定类型共享,type 为共享类型,包括 Wifi 热点、蓝牙、USB,使用 callback 方式作为异步方法。             |
47| getStatsRxBytes(callback: AsyncCallback\<number>): void;         | 获取共享接收数据量,单位 KB,使用 callback 方式作为异步方法。                                                        |
48| getStatsTxBytes(callback: AsyncCallback\<number>): void;         | 获取共享发送数据量,单位 KB,使用 callback 方式作为异步方法。                                                        |
49| getStatsTotalBytes(callback: AsyncCallback\<number>): void;      | 获取共享总数据流量,单位 KB,使用 callback 方式作为异步方法。                                                        |
50| getSharingIfaces(state: SharingIfaceState, callback: AsyncCallback\<Array\<string>>): void;  | 获取指定状态的网卡名称,state 为状态,包括正在共享、可共享、共享错误,使用 callback 方式作为异步方法。 |
51| getSharingState(type: SharingIfaceType, callback: AsyncCallback\<SharingIfaceState>): void;  | 获取指定类型共享状态,type 为类型,目前支持 Wifi 热点、蓝牙、USB,使用 callback 方式作为异步方法。  |
52| getSharableRegexes(type: SharingIfaceType, callback: AsyncCallback\<Array\<string>>): void;  | 获取与指定类型匹配的网卡正则表达式列表,type 为类型,目前支持 Wifi 热点、蓝牙、USB,使用 callback 方式作为异步方法。 |
53| on(type: 'sharingStateChange', callback: Callback\<boolean>): void;        | 注册共享状态改变监听,返回网络共享的状态。                                                                |
54| off(type: 'sharingStateChange', callback?: Callback\<boolean>): void;      | 注销共享状态改变监听,返回网络共享的状态。                                                                |
55| unction on(type: 'interfaceSharingStateChange', callback: Callback\<{ type: SharingIfaceType, iface: string, state: SharingIfaceState }>): void;    | 注册指定网卡共享状态改变监听。    |
56| off(type: 'interfaceSharingStateChange', callback?: Callback\<{ type: SharingIfaceType, iface: string, state: SharingIfaceState }>): void; | 注销指定网卡共享状态改变监听。             |
57| on(type: 'sharingUpstreamChange', callback: Callback\<NetHandle>): void;               | 注册上行网卡改变监听。                                                                         |
58| off(type: 'sharingUpstreamChange', callback?: Callback\<NetHandle>): void;             | 注销上行网卡改变监听。                                                                         |
59
60## 开启网络共享
61
621. 从@kit.NetworkKit 中导入 sharing 命名空间。
632. 注册监听共享状态的改变。
643. 调用 startSharing 方法,来开启指定类型共享。
654. 接收到共享状态开启的回调,开启共享成功。
66
67```ts
68// 从@kit.NetworkKit中导入sharing命名空间
69import { sharing } from '@kit.NetworkKit';
70import { BusinessError } from '@kit.BasicServicesKit';
71
72// 注册监听共享状态的改变
73sharing.on('sharingStateChange', (data: boolean) => {
74  console.log(JSON.stringify(data));
75});
76
77// 调用startSharing方法,来开启指定类型共享
78sharing.startSharing(sharing.SharingIfaceType.SHARING_WIFI).then(() => {
79  console.log('start wifi sharing successful');
80}).catch((error: BusinessError) => {
81  console.error('start wifi sharing failed');
82});
83```
84
85## 停止网络共享
86
87### 开发步骤
88
891. 从@kit.NetworkKit 中导入 sharing 命名空间。
902. 注册监听共享状态的改变。
913. 调用 stopSharing 方法,来停止指定类型共享。
924. 接收到共享状态关闭的回调,停止共享成功。
93
94```ts
95// 从@kit.NetworkKit中导入sharing命名空间
96import { sharing } from '@kit.NetworkKit';
97import { BusinessError } from '@kit.BasicServicesKit';
98
99// 注册监听共享状态的改变
100sharing.on('sharingStateChange', (data: boolean) => {
101  console.log(JSON.stringify(data));
102});
103
104// 调用stopSharing方法,来停止指定类型共享
105sharing.stopSharing(sharing.SharingIfaceType.SHARING_WIFI).then(() => {
106  console.log('start wifi sharing successful');
107}).catch((error: BusinessError) => {
108  console.error('start wifi sharing failed');
109});
110```
111
112## 获取共享网络的数据流量
113
114### 开发步骤
115
1161. 从@kit.NetworkKit 中导入 sharing 命名空间。
1172. 调用 startSharing 方法,来开启指定类型共享。
1183. 调用 getStatsTotalBytes 方法,来获取共享网络数据量。
1194. 调用 stopSharing 方法,来停止指定类型共享,共享网络数据量清零。
120
121```ts
122// 从@kit.NetworkKit中导入sharing命名空间
123import { sharing } from '@kit.NetworkKit';
124import { BusinessError } from '@kit.BasicServicesKit';
125
126// 调用startSharing方法,来开启指定类型共享
127sharing.startSharing(sharing.SharingIfaceType.SHARING_WIFI).then(() => {
128  console.log('start wifi sharing successful');
129}).catch((error: BusinessError) => {
130  console.error('start wifi sharing failed');
131});
132
133// 调用getStatsTotalBytes方法,来获取共享网络数据量
134sharing.getStatsTotalBytes().then((data: number) => {
135  console.log(JSON.stringify(data));
136}).catch((error: BusinessError) => {
137  console.error(JSON.stringify(error));
138});
139
140// 调用stopSharing方法,来停止指定类型共享,共享网络数据量清零
141sharing.stopSharing(sharing.SharingIfaceType.SHARING_WIFI).then(() => {
142  console.log('start wifi sharing successful');
143}).catch((error: BusinessError) => {
144  console.error('start wifi sharing failed');
145});
146
147// 再次调用getStatsTotalBytes方法,共享网络数据量已清零
148sharing.getStatsTotalBytes().then((data: number) => {
149  console.log(JSON.stringify(data));
150}).catch((error: BusinessError) => {
151  console.error(JSON.stringify(error));
152});
153```