diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/ets/pages/Index.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/ets/pages/Index.ets index e2418ab45252ab05d4e925768d61fe18a81a48b5..5960636a134f2a48ececb6f0ed40ce10857abe8f 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/ets/pages/Index.ets @@ -69,6 +69,7 @@ struct HttpRequestDemo { .justifyContent(FlexAlign.Center) } + // [Start request_interface_development] // 封装普通的 HTTP 请求逻辑 private sendHttpRequest(): void { this.normalReqResult = $r('app.string.testing'); @@ -151,7 +152,9 @@ struct HttpRequestDemo { } ); } + // [End request_interface_development] + // [Start request_in_stream_interface_development] // 封装流式 HTTP 请求逻辑 private sendStreamHttpRequest(): void { this.streamReqResult = $r('app.string.testing'); @@ -234,4 +237,5 @@ struct HttpRequestDemo { httpRequest.destroy(); }); } + // [End request_in_stream_interface_development] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/module.json5 b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/module.json5 index aacdfd93b88b1da2af72ccaa75643bbc1b120b05..9f8ba45ee9bf3e6c7f6e8bdc9e253966db28e87f 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/module.json5 +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/module.json5 @@ -65,7 +65,14 @@ ], "requestPermissions": [ { - "name": "ohos.permission.INTERNET" + "name": "ohos.permission.INTERNET", + "reason": "$string:grant_internet", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } } ] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/resources/en_US/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/resources/en_US/element/string.json index 8ce2693370b9e844ed8263ef2281bc390cd0f39c..61754923b63889aa0b145d172b2100e4d78ce611 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/resources/en_US/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/resources/en_US/element/string.json @@ -39,6 +39,10 @@ { "name": "httpSendSuccess", "value": "httpSendSuccess" + }, + { + "name": "grant_internet", + "value": "grant_internet" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/resources/zh_CN/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/resources/zh_CN/element/string.json index 5cbe02a39bdb5cc22be6cd7da381365cf1d8f2ed..e8ed9dd362d7b2bdbaca625aa53088ebc60dce83 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/resources/zh_CN/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/HTTP_case/entry/src/main/resources/zh_CN/element/string.json @@ -39,6 +39,10 @@ { "name": "httpSendSuccess", "value": "发送HTTP请求成功" + }, + { + "name": "grant_internet", + "value": "网络使用权限" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/MDNS_case/entry/src/main/ets/pages/Index.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/MDNS_case/entry/src/main/ets/pages/Index.ets index fe3f68b6d336768b0650aa6abc2ae5b6985f7fc2..5357956d01b1f38cfccd3c4b5d9a25b94b58b08b 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/MDNS_case/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/MDNS_case/entry/src/main/ets/pages/Index.ets @@ -209,6 +209,7 @@ struct MdnsServiceDemo { .justifyContent(FlexAlign.Center); } + // [Start manage_local_services] private addLocalService(): void { this.addServiceStatus = serviceOperateStatus.ADDING; mdns.addLocalService(context, this.localServiceInfo).then((data) => { @@ -241,7 +242,9 @@ struct MdnsServiceDemo { Logger.error(`Error removing local service: ${JSON.stringify(err)}`); }); } + // [End manage_local_services] + // [Start discover_local_services] private async startServiceDiscovery(): Promise { this.discoveryStatus = serviceOperateStatus.DISCOVERY_STARTING; if (!context) { @@ -289,4 +292,5 @@ struct MdnsServiceDemo { Logger.info(`Error stopping mDNS service discovery: ${JSON.stringify(err)}`); } } + // [End discover_local_services] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/LocalSocketWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/LocalSocketWorker.ets index bc362fef35a2b52650e6b6116acf7edb0de1cddc..dcf53564b86d2edd82550cc450377df0f113b6f9 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/LocalSocketWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/LocalSocketWorker.ets @@ -48,6 +48,7 @@ function stringToArrayBuffer(str: string): ArrayBuffer { return buf; } +// [Start application_transmits_data_via_local_socket] // 启动本地 Socket 客户端 function startLocalSocket(address: string, timeout: number, closeTime: number): void { let client: socket.LocalSocket = socket.constructLocalSocketInstance(); @@ -91,8 +92,9 @@ function startLocalSocket(address: string, timeout: number, closeTime: number): workerPort.postMessage({ type: 'clientStatus', status: 'Closed by timeout' }); }, closeTime); } +// [End application_transmits_data_via_local_socket] - +// [Start application_transmits_data_via_local_socket_server] // 启动本地 Socket 服务器 function startLocalSocketServer(address: string): void { let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); @@ -134,4 +136,5 @@ function startLocalSocketServer(address: string): void { server.off('error'); Logger.info('Server events unsubscribed.'); }, 30000); // 设置一个合理的超时关闭(例如30秒后关闭服务器) -} \ No newline at end of file +} +// [End application_transmits_data_via_local_socket_server] \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/MulticastWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/MulticastWorker.ets index 276b4c3d884c11b9b05aaac8d8b861eca2a18455..844a8cfe5e71716d48b4014cf1001c31c41df329 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/MulticastWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/MulticastWorker.ets @@ -38,6 +38,7 @@ function postMessage(arg0: Message) { const workerPort: ThreadWorkerGlobalScope = worker.workerPort; +// [Start application_transmits_data_via_multicast_socket] function startMulticast(data: MulticastData) { let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); @@ -99,6 +100,7 @@ workerPort.onmessage = (e: MessageEvents) => { startMulticast(multicastData); } }; +// [End application_transmits_data_via_multicast_socket] /** * Defines the event handler to be called when the worker receives a message that cannot be deserialized. diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/OneWayTlsWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/OneWayTlsWorker.ets index 2c46af6a23c2ce9f65c1554f47c5eae1f3c8d140..3f709f8a4db8db82cfac14cb17a8529dcd65ca51 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/OneWayTlsWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/OneWayTlsWorker.ets @@ -77,6 +77,7 @@ function handleMessage(message: TlsOneWayMessage) { } } +// [Start one-way_authentication_via_tls_socket] // 读取 CA 证书 function loadCA(fileUri: string) { try { @@ -146,6 +147,7 @@ function sendMessageToServer(message: string) { workerPort.postMessage({ type: 'sendMessageFailure', message: e.message }); }); } +// [End one-way_authentication_via_tls_socket] // ArrayBuffer 转 utf8 字符串 function buf2String(buf: ArrayBuffer): string { @@ -153,3 +155,4 @@ function buf2String(buf: ArrayBuffer): string { let textDecoder = util.TextDecoder.create('utf-8'); return textDecoder.decodeToString(msgArray); } + diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/Tcp2OneWayTlsWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/Tcp2OneWayTlsWorker.ets index c28834d63118b4de2b03686ea187f2c35dbdf3da..29467953069cd7f75a7ba21807df729a0a839766 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/Tcp2OneWayTlsWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/Tcp2OneWayTlsWorker.ets @@ -74,6 +74,7 @@ function handleMessage(message: TlsOneWayMessage) { } } +// [Start one-way_authentication_by_upgrading_tcp_socket_to_tls_socket] function loadCA(fileUri: string) { try { let buf = new ArrayBuffer(4096); @@ -153,6 +154,7 @@ function sendMessageToServer(message: string) { workerPort.postMessage({ type: 'sendMessageFailure', message: `Failed to send message: ${e.message}` }); }); } +// [End one-way_authentication_by_upgrading_tcp_socket_to_tls_socket] function buf2String(buf: ArrayBuffer): string { let msgArray = new Uint8Array(buf); diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/Tcp2TwoWayTlsWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/Tcp2TwoWayTlsWorker.ets index c29c34ae72e4b4bf20fb2c6ea471ca5c3295cce4..1de35f20eb02094f6dc660e67ba31f8a588fef8b 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/Tcp2TwoWayTlsWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/Tcp2TwoWayTlsWorker.ets @@ -75,6 +75,7 @@ function handleMessage(message: TlsTwoWayMessage) { } } +// [Start two-way_authentication_by_upgrading_tcp_socket_to_tls_socket] // Handle file loading (CA certificate, client certificate, private key) function loadFile(fileUri: string) { try { @@ -159,6 +160,7 @@ function sendMessageToServer(message: string) { workerPort.postMessage({ type: 'sendMessageFailure', message: `Send failed: ${e.message}` }); }); } +// [End two-way_authentication_by_upgrading_tcp_socket_to_tls_socket] function buf2String(buf: ArrayBuffer): string { let msgArray = new Uint8Array(buf); diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TcpClientWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TcpClientWorker.ets index 0d7c2b5aefde52257442588201be234d2da5ad6e..0081bcd428a3b9ecef9192fdbe7f901f207b380e 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TcpClientWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TcpClientWorker.ets @@ -48,6 +48,7 @@ function sendMessage(tcpMessage: TcpMessage) { return; } + // [Start client_applies_tcp_protocol_for_communication] // 绑定本地服务器地址 class SocketInfo { public message: ArrayBuffer = new ArrayBuffer(1); @@ -116,7 +117,7 @@ function disConnect() { workerPort.postMessage({ type: 'Close connection failed' }); }); } - + // [End client_applies_tcp_protocol_for_communication] /** * Defines the event handler to be called when the worker thread receives a message sent by the host thread. * The event handler is executed in the worker thread. diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TcpServerWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TcpServerWorker.ets index 9d060f87bd8ea0ffd3e202ba38ee30d7b3f48a0e..524bd4ffc022a15c3d810ca53eb65bd93aa0a755 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TcpServerWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TcpServerWorker.ets @@ -43,6 +43,7 @@ function handleMessage(message: TcpMessage) { } } +// [Start application_transmits_data_via_tcp_socket_server] function startServer(tcpMessage: TcpMessage) { let ipAddress: socket.NetAddress = {} as socket.NetAddress; ipAddress.address = tcpMessage.serverIp!; // 服务端IP @@ -131,6 +132,7 @@ function disConnect() { } } +// [End application_transmits_data_via_tcp_socket_server] /** * Defines the event handler to be called when the worker thread receives a message sent by the host thread. diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TlsServerWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TlsServerWorker.ets index de6e8f843c6dcf8f06dffa1ea12ab5a505f6a00c..7906b840c59c76e5309821fdd9c182b88242e54a 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TlsServerWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TlsServerWorker.ets @@ -38,9 +38,8 @@ function handleMessage(message: TlsServerMessage) { } } +// [Start application_transmits_encrypted_data_via_tls_socket_server] function startTLSserver(message: TlsServerMessage) { - - try { const tlsSecureOptions: socket.TLSSecureOptions = { key: message.serverKey, @@ -90,6 +89,7 @@ function handleClientConnection(client: socket.TLSSocketConnection) { workerPort.postMessage({ type: 'error', message: `Failed to close connection: ${err.message}` }); }); } +// [End application_transmits_encrypted_data_via_tls_socket_server] function bufToString(buf: ArrayBuffer): string { let msgArray = new Uint8Array(buf); diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TwoWayTlsWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TwoWayTlsWorker.ets index 6d125ac8a2d05fcf6f956b5d9f0cea34b59ee575..c9484a1cda94266b56792c92bfc2ba488f4357f0 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TwoWayTlsWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/TwoWayTlsWorker.ets @@ -79,6 +79,7 @@ function handleMessage(message: TlsTwoWayMessage) { } } +// [Start two-way_authentication_via_tls_socket] // 读取文件并返回内容 function loadFile(fileUri: string) { try { @@ -158,6 +159,7 @@ function sendMessageToServer(message: string) { workerPort.postMessage({ type: 'sendMessageFailure', message: e.message }); }); } +// [End two-way_authentication_via_tls_socket] // ArrayBuffer 转 utf8 字符串 function buf2String(buf: ArrayBuffer): string { @@ -166,3 +168,4 @@ function buf2String(buf: ArrayBuffer): string { return textDecoder.decodeToString(msgArray); } + diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/UdpWorker.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/UdpWorker.ets index 3670b47f4580075295260e435850613cd4ec5828..d8a45253b2d6b5d14c3637be6a5eb4c4e963bc2c 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/UdpWorker.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/ets/workers/UdpWorker.ets @@ -40,6 +40,7 @@ function handleMessage(message: TcpMessage) { } } +// [Start apply_udp_protocol_for_communication] function startServer(tcpMessage: TcpMessage) { let ipAddress: socket.NetAddress = {} as socket.NetAddress; ipAddress.address = tcpMessage.serverIp!; // 服务端IP @@ -91,6 +92,7 @@ function disConnect() { } }); } +// [End apply_udp_protocol_for_communication] workerPort.onmessage = (e: MessageEvents) => { const message: TcpMessage = e.data; diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/module.json5 b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/module.json5 index 106709d4e7f14fdd2ab48a193c8f287365017b69..0cfdde1ecc15c50887fc70a721bae4167899885e 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/module.json5 +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/module.json5 @@ -64,10 +64,24 @@ ], "requestPermissions": [ { - "name": "ohos.permission.INTERNET" + "name": "ohos.permission.INTERNET", + "reason": "$string:grant_internet", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } }, { - "name": "ohos.permission.GET_WIFI_INFO" + "name": "ohos.permission.GET_WIFI_INFO", + "reason": "$string:grant_get_wifi_info", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } } ] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/resources/base/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/resources/base/element/string.json index a0f83dbbf34ce4102506276e12004ab4902e6209..5ae3a13538a6a90f51952b9965be58adb9f7fd9f 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/resources/base/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/main/resources/base/element/string.json @@ -299,6 +299,14 @@ { "name": "Select_Server_Cert", "value": "选择服务器证书" + }, + { + "name": "grant_internet", + "value": "网络使用权限" + }, + { + "name": "grant_get_wifi_info", + "value": "获取wifi信息权限" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/ohosTest/ets/test/Ability.test.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/ohosTest/ets/test/Ability.test.ets index c76d7089a87ebc3608ef2824b3ff7a93ca860667..e086fd84551689001a34e4908605065f38542216 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/ohosTest/ets/test/Ability.test.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/Socket/entry/src/ohosTest/ets/test/Ability.test.ets @@ -16,7 +16,7 @@ import { describe, it, expect } from '@ohos/hypium'; import { abilityDelegatorRegistry, Driver, MatchPattern, ON } from '@kit.TestKit'; import Logger from '../../../main/ets/common/Logger'; -import { UIAbility } from '@kit.AbilityKit'; +import { UIAbility, Want} from '@kit.AbilityKit'; const delegator = abilityDelegatorRegistry.getAbilityDelegator(); diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/cpp/napi_init.cpp b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/cpp/napi_init.cpp index 8f9fdea060d8e6b365fe19b338f12fb9ef9fd88a..6842b775298695bd3ee1beaace76db2c3df65c93 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/cpp/napi_init.cpp +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/cpp/napi_init.cpp @@ -25,6 +25,7 @@ #define LOG_DOMAIN 0x3200 // 全局domain宏,标识业务领域 #define LOG_TAG "WSDEMO" // 全局tag宏,标识模块日志tag +// [Start websocket_build_project] // WebSocket客户端全局变量 static struct WebSocket *g_client = nullptr; @@ -95,6 +96,7 @@ static napi_value ConnectWebsocket(napi_env env, napi_callback_info info) napi_get_boolean(env, connectRet == 0, &result); return result; } +// [End websocket_build_project] static napi_value SendMessage(napi_env env, napi_callback_info info) { diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/module.json5 b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/module.json5 index 5d46d2c731d38201e77200df8266db45fd41225b..5c4e4c84e507c998c510711176a2a513f64caa0b 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/module.json5 +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/module.json5 @@ -51,6 +51,7 @@ "requestPermissions":[ { "name" : "ohos.permission.INTERNET", + "reason": "$string:grant_internet", "usedScene": { "abilities": [ "FormAbility" diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/resources/base/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/resources/base/element/string.json index 76a2a00146d072af5c21fd7c767c900eee13759c..c0ff9aa5f35b94ef4bf76323a802a49d86ad9c60 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/resources/base/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_C/entry/src/main/resources/base/element/string.json @@ -51,8 +51,10 @@ { "name": "Close_connection_failed", "value": "关闭连接失败!" + }, + { + "name": "grant_internet", + "value": "网络使用权限" } - - ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/ets/pages/Index.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/ets/pages/Index.ets index 79a4e653ee9bea1ac87394f9ced5e463ff935362..82660a443c2a76fde63a9ceff079c531fc3a1d18 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/ets/pages/Index.ets @@ -103,6 +103,7 @@ struct WebSocketDemo { }.width('100%').height('100%').justifyContent(FlexAlign.Center) } +// [Start websocket_development_steps] // 连接WebSocket connectWebSocket() { this.connectionStatus = 'Connecting...'; @@ -214,4 +215,6 @@ struct WebSocketDemo { this.ws.off('error'); this.ws = null; } + // [End websocket_development_steps] } + diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/module.json5 b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/module.json5 index d9faa396d7d5c5e37b2ae18a092426c3eeb48b7c..689f6cd041d97249edce64107ebdba2f5d1f55b5 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/module.json5 +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/module.json5 @@ -64,7 +64,14 @@ ], "requestPermissions": [ { - "name": "ohos.permission.INTERNET" + "name": "ohos.permission.INTERNET", + "reason": "$string:grant_internet", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } } ] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/resources/en_US/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/resources/en_US/element/string.json index 62eebd7f179c57ecea2138734c46d36f06ec1d33..c4122a478b875e0c52a7fadbe3556cf322661ca0 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/resources/en_US/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/resources/en_US/element/string.json @@ -39,6 +39,10 @@ { "name": "CloseConnectionResult", "value": "CloseConnectionResult" + }, + { + "name": "grant_internet", + "value": "grant_internet" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/resources/zh_CN/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/resources/zh_CN/element/string.json index 7b1d6b5b8ec2c05145bf58dc13ee924ac2e61297..033dc89b4252e56eed7731d90e08dacb0c3188dd 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/resources/zh_CN/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_Datatransmission/WebSocket_case/entry/src/main/resources/zh_CN/element/string.json @@ -39,6 +39,10 @@ { "name": "CloseConnectionResult", "value": "关闭连接结果" + }, + { + "name": "grant_internet", + "value": "网络使用权限" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/README_zh.md b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/README_zh.md index a395ef6f53da15baca6703beddbadfadf4ae873f..01995342ee5f65ccd2ef8bffd0f2972693d3038e 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/README_zh.md +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/README_zh.md @@ -76,6 +76,8 @@ entry/src/main/ets/ [ohos.permission.INTERNET](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissioninternet) +[ohos.permission.GET_NETWORK_INFO](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionget_network_info) + ### 依赖 不涉及。 diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/ets/pages/Index.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/ets/pages/Index.ets index 032f281a7c4ce6545c5e700d0498c2c75489e717..0349587d572ce24769e9f75a68bada7337c40ea3 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/ets/pages/Index.ets @@ -171,6 +171,7 @@ struct NetworkStatisticsDemo { .justifyContent(FlexAlign.Center); } +// [Start obtain_realtime_traffic_statistics_of_network_interface_cards/uid] // 获取各种实体的流量数据方法 getIfaceRxBytes() { statistics.getIfaceRxBytes(IFACE).then((stats: number) => { @@ -262,4 +263,5 @@ struct NetworkStatisticsDemo { this.logMessage = `Failed to get socket file descriptor: ${JSON.stringify(err)}`; }); } +// [End obtain_realtime_traffic_statistics_of_network_interface_cards/uid] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/module.json5 b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/module.json5 index f2e5276bfbdea5909701f7ad1b62db025a8145da..0b95c44301857394101e73f37cab7080e0767b36 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/module.json5 +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/module.json5 @@ -64,10 +64,24 @@ ], "requestPermissions": [ { - "name": "ohos.permission.INTERNET" + "name": "ohos.permission.INTERNET", + "reason": "$string:grant_internet", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } }, { - "name": "ohos.permission.GET_NETWORK_INFO" + "name": "ohos.permission.GET_NETWORK_INFO", + "reason": "$string:grant_get_network_info", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } } ] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/resources/en_US/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/resources/en_US/element/string.json index a2b2c1282a79231a352e3189a3c367678e6f108c..5ffc94b91a42c0c49a7da0359b1fd1a9100d7bc4 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/resources/en_US/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/resources/en_US/element/string.json @@ -55,6 +55,14 @@ { "name": "TitleName", "value": "Flow_Manage_Name" + }, + { + "name": "grant_internet", + "value": "grant_internet" + }, + { + "name": "grant_get_network_info", + "value": "grant_get_network_info" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/resources/zh_CN/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/resources/zh_CN/element/string.json index 479324da8628baaa5e9a3ad8787441cba79130b9..0858a4c0aecdfd2907c79d71f38a3af09ada32c2 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/resources/zh_CN/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/FlowManagement_case/entry/src/main/resources/zh_CN/element/string.json @@ -55,6 +55,14 @@ { "name": "TitleName", "value": "流量管理" + }, + { + "name": "grant_internet", + "value": "网络使用权限" + }, + { + "name": "grant_get_network_info", + "value": "获取网络信息权限" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/cpp/napi_init.cpp b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/cpp/napi_init.cpp index 41349abf26b7c039a5918fcb5c0117c6ea933071..92f3e851e7ed31292295be99dd9fbe0765295296 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/cpp/napi_init.cpp +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/cpp/napi_init.cpp @@ -13,9 +13,11 @@ * limitations under the License. */ +// [Start header_file] #include "napi/native_api.h" #include "network/netmanager/net_connection.h" #include "network/netmanager/net_connection_type.h" +// [End header_file] #include const size_t MIN_ARG_COUNT = 4; // 最小参数个数,用于函数参数检查 @@ -35,18 +37,21 @@ napi_value CreateErrorResult(napi_env env, int32_t errorCode) return result; } +// [Start build_project1] // 获取默认网络的函数 static napi_value GetDefaultNet(napi_env env, napi_callback_info info) { size_t argc = 1; // 期望接收一个函数 napi_value args[1] = {nullptr}; // 存储接收到的参数 napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); + // [StartExclude build_project1] if (argc < 1) { // 如果参数小于1 return CreateErrorResult(env, PARAMETER_ERROR_CODE); } int32_t param; napi_get_value_int32(env, args[0], ¶m); // 从 args[0] 获取整数值并存储到 param 中 + // [EndExclude build_project1] NetConn_NetHandle netHandle; if (param == 0) { // 如果参数是0 param = OH_NetConn_GetDefaultNet(NULL); @@ -70,7 +75,8 @@ static napi_value NetId(napi_env env, napi_callback_info info) napi_create_int32(env, defaultNetId, &result); return result; } - +// [End build_project1] + // 检查默认网络是否激活的函数 static napi_value HasDefaultNet(napi_env env, napi_callback_info info) { @@ -268,6 +274,7 @@ static napi_value UnregisterDnsResolver(napi_env env, napi_callback_info info) return result; } +// [Start build_project2] EXTERN_C_START static napi_value Init(napi_env env, napi_value exports) { @@ -289,7 +296,9 @@ static napi_value Init(napi_env env, napi_value exports) return exports; } EXTERN_C_END - +// [End build_project2] + +// [Start build_project3] static napi_module demoModule = { .nm_version = 1, .nm_flags = 0, @@ -301,4 +310,4 @@ static napi_module demoModule = { }; extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); } - \ No newline at end of file +// [End build_project3] \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/ets/pages/Index.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/ets/pages/Index.ets index ff1c5dd56c768d2356b374712ae6d0289680a0a2..33b484fb321a9852e0949252906d2dd947f433f3 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/ets/pages/Index.ets @@ -12,7 +12,9 @@ * limitations under the License. */ +// [Start build_project5] import testNetManager from 'libentry.so'; +// [StartExclude build_project5] import Logger from '../common/Logger'; enum ReturnCode { @@ -69,11 +71,12 @@ struct Index { .fontColor(Color.Black) .margin({ bottom: MARGIN.SMALL }) .id('test-message') // 为测试消息设置 ID,便于测试获取内容 - + // [EndExclude build_project5] Button($r('app.string.GetDefaultNet')) .onClick(() => { this.GetDefaultNet(); }) + // [StartExclude build_project5] .width('80%') .height(BUTTON_HEIGHT) .margin({ top: MARGIN.SMALL }) @@ -82,11 +85,13 @@ struct Index { .fontSize(FONT_SIZE.SMALL) .borderRadius(BORDER_RADIUS) .id('get-default-net-btn') // 为按钮设置 ID,便于测试点击 + // [EndExclude build_project5] Button($r('app.string.CodeNumber')) .onClick(() => { this.CodeNumber(); }) + // [StartExclude build_project5] .width('80%') .height(BUTTON_HEIGHT) .margin({ top: MARGIN.SMALL }) @@ -214,6 +219,7 @@ struct Index { .id('unregister-dns-resolver-btn') }.width('100%').height('100%').justifyContent(FlexAlign.Center); } + // [EndExclude build_project5] GetDefaultNet() { try { @@ -253,6 +259,7 @@ struct Index { Logger.error(this.logMessage); } } + // [End build_project5] GetHasDefaultNet() { let hasDefaultNet = testNetManager.HasDefaultNet(); // 调用 C++ 部分的接口 diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/module.json5 b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/module.json5 index f2e5276bfbdea5909701f7ad1b62db025a8145da..0b95c44301857394101e73f37cab7080e0767b36 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/module.json5 +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/module.json5 @@ -64,10 +64,24 @@ ], "requestPermissions": [ { - "name": "ohos.permission.INTERNET" + "name": "ohos.permission.INTERNET", + "reason": "$string:grant_internet", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } }, { - "name": "ohos.permission.GET_NETWORK_INFO" + "name": "ohos.permission.GET_NETWORK_INFO", + "reason": "$string:grant_get_network_info", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } } ] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/resources/en_US/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/resources/en_US/element/string.json index 78631d0183a9d61842072bd0b54b145dbb36a248..edf3d00bc5e1dc4f1e991a739089e802773db7af 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/resources/en_US/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/resources/en_US/element/string.json @@ -55,6 +55,14 @@ { "name": "UnregisterDnsResolver", "value": "UnregisterDnsResolver" + }, + { + "name": "grant_internet", + "value": "grant_internet" + }, + { + "name": "grant_get_network_info", + "value": "grant_get_network_info" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/resources/zh_CN/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/resources/zh_CN/element/string.json index 4608792a927b4723e879697aee75c41bce487e35..46a0c1dfbc363d729974a55260160884d90e0384 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/resources/zh_CN/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Exploitation_case/entry/src/main/resources/zh_CN/element/string.json @@ -55,6 +55,14 @@ { "name": "UnregisterDnsResolver", "value": "取消注册自定义 DNS 解析器" + }, + { + "name": "grant_internet", + "value": "网络使用权限" + }, + { + "name": "grant_get_network_info", + "value": "获取网络信息权限" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/README_zh.md b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/README_zh.md index 4d7d925f3619811c00af0e3cd08f3714fec5c09a..f0953edf92d07f387c9fa1912bfd024ff89805a2 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/README_zh.md +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/README_zh.md @@ -63,6 +63,8 @@ entry/src/main/ets/ [ohos.permission.INTERNET](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissioninternet) +[ohos.permission.GET_NETWORK_INFO](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissionget_network_info) + ### 依赖 不涉及。 diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/ets/pages/Index.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/ets/pages/Index.ets index af1f4d9039653e5ce21265a8945e040eeb902973..650d981428fe743aba8b53b7d2574509f4b4d09b 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/ets/pages/Index.ets @@ -33,6 +33,8 @@ let netAddress: socket.NetAddress = { port: 8080 // 端口号,默认设置为8080 }; +// [Start original_network_connection_uses_socket] +// [Start monitor_default_network_change] // 监控默认网络变化 async function test() { const netConnection = connection.createNetConnection(); @@ -41,6 +43,7 @@ async function test() { Logger.info(JSON.stringify(data)); }); } +// [End monitor_default_network_change] // 原网络连接使用Socket模块建立连接 async function useSocket() { @@ -100,7 +103,9 @@ async function socketTest() { Logger.error(e.code.toString()); }; } +// [End original_network_connection_uses_socket] +// [Start construct_singleton_object] // 构造单例对象 export class GlobalContext { private static instance: GlobalContext; @@ -126,6 +131,7 @@ export class GlobalContext { this._objects.set(key, objectClass); } } +// [End construct_singleton_object] export function resourceToString(resource: Resource): string { return getContext().resourceManager.getStringSync(resource); @@ -259,6 +265,7 @@ struct NetworkConnectionPage { .justifyContent(FlexAlign.Center) } + // [Start notification_of_network_status_change] // 连接并接收指定网络的状态变化通知 connectNetwork() { if (this.conn) { @@ -320,7 +327,10 @@ struct NetworkConnectionPage { Logger.info('No active network connection.'); } } + // [End notification_of_network_status_change] + // [Start query_the_capability_information_and_connection_information] + // [Start get_all_registered_networks] // 获取所有注册的网络 getAllNetworks() { // 调用getAllNets,获取所有处于连接状态的网络列表(Array) @@ -346,6 +356,7 @@ struct NetworkConnectionPage { } }); } + // [End get_all_registered_networks] // 根据数据网络查询网络的能力信息及连接信息 getDefaultNetwork() { @@ -404,7 +415,9 @@ struct NetworkConnectionPage { } }); } + // [End query_the_capability_information_and_connection_information] + // [Start resolve_the_domain_name_and_get_all_ips] // 使用默认网络解析主机名以获取所有IP地址 getDefaultNetworkIP() { this.defaultNetworkIPStatus = 'Retrieving...'; @@ -426,4 +439,5 @@ struct NetworkConnectionPage { Logger.error('Failed to retrieve default network:', JSON.stringify(err)); }); } + // [End resolve_the_domain_name_and_get_all_ips] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/module.json5 b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/module.json5 index cc1a027a90f0b3be36990ad54af3d6cf3a581c23..e0bfb9d6fef7603464e77d64a1fd01373ca9b537 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/module.json5 +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/module.json5 @@ -64,10 +64,24 @@ ], "requestPermissions": [ { - "name": "ohos.permission.INTERNET" + "name": "ohos.permission.INTERNET", + "reason": "$string:grant_internet", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } }, { - "name": "ohos.permission.GET_NETWORK_INFO" + "name": "ohos.permission.GET_NETWORK_INFO", + "reason": "$string:grant_get_network_info", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } } ] } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/resources/en_US/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/resources/en_US/element/string.json index 77c4731a1386e664b56674826b406e6eaaf21807..7df89c36d2844bd01212588b160bd8781f29b826 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/resources/en_US/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/resources/en_US/element/string.json @@ -55,6 +55,14 @@ { "name": "defaultNetworkIPStatus", "value": "defaultNetworkIPStatus" + }, + { + "name": "grant_internet", + "value": "grant_internet" + }, + { + "name": "grant_get_network_info", + "value": "grant_get_network_info" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/resources/zh_CN/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/resources/zh_CN/element/string.json index ae6036cb17f20bd5159f1f65a2f713bd054e3b7d..0e79dd08230b748c6db9c9140e5fce7955198e58 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/resources/zh_CN/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/NetConnection_Manage_case/entry/src/main/resources/zh_CN/element/string.json @@ -55,6 +55,14 @@ { "name": "defaultNetworkIPStatus", "value": "默认网络IP" + }, + { + "name": "grant_internet", + "value": "网络使用权限" + }, + { + "name": "grant_get_network_info", + "value": "获取网络信息权限" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/README_zh.md b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/README_zh.md index 7a049c98d956ec2a1230e84607d05505e467557f..cbdc1a9644daca6d6cb111ed2ed1365fd6afcd9c 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/README_zh.md +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/README_zh.md @@ -12,19 +12,23 @@ VPN 即虚拟专网(VPN-Virtual Private Network)在公用网络上建立专 使用说明 +备注:需在 `entry\src\main\module.json5` 文件的 `extensionAbilities` 节点下,为 `type` 字段手动新增 `vpn` 选项。 + 1. 在设备上启动应用。 -2. 在界面上输入 VPN 服务器 IP 地址、虚拟网卡 IP 地址和需要阻止的应用包名。 +2. 在界面上输入 VPN 服务器 IP 地址、虚拟网卡 IP 地址和需要阻止的应用包名。(也可以使用默认数据作为选项) + +3. 点击 `创建隧道` 按钮以建立 UDP 隧道。 -3. 点击 `CreateTunnel` 按钮以建立 UDP 隧道。 +4. 点击 `保护隧道` 按钮以将隧道与虚拟网卡绑定。 -4. 点击 `Protect` 按钮以将隧道与虚拟网卡绑定。 +5. 点击启动VPN拓展程序启动VPN拓展能力。 -5. 点击 `SetupVpn` 按钮配置 VPN 并启动 VPN 服务。 +6. 点击 `启动VPN` 按钮配置 VPN 并启动 VPN 服务。 -6. 点击 `Stop vpn` 按钮以停止 VPN 连接。 +7. 点击 `关闭VPN` 按钮以停止 VPN 连接。 -7. 点击 `Stop vpnExt` 按钮以停止 VPN 扩展能力。 +8. 点击 `关闭VPN拓展程序` 按钮以停止 VPN 扩展能力。 @@ -100,8 +104,6 @@ entry/src/main/cpp/ ### 相关权限 [ohos.permission.INTERNET](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissioninternet) -[ohos.permission.MANAGE_VPN](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionmanage_vpn) -[ohos.permission.NOTIFICATION_CONTROLLER](https://gitee.com/openharmony/docs/blob/OpenHarmony-5.0.1-Release/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionnotification_controller) ### 依赖 @@ -112,9 +114,6 @@ entry/src/main/cpp/ 1. 本示例仅支持标准系统上运行,支持设备:RK3568。 2. 本示例为Stage模型,支持API14版本SDK,版本号:5.0.2。 3. 本示例需要使用DevEco Studio Release(5.0.5.306)及以上版本才可编译运行。 -4. 本示例在启动前需搭建服务端环境,成功启动相应服务端后再运行客户端,服务端脚本(server/UDP_server.py)需要在Python 3.8.5版本下运行(需与客户端处于同一局域网,如连接同一热点)。 -5. 该示例运行测试完成后,再次运行需要重新启动服务端和客户端。 -6. 本示例使用了system_basic级别的权限(相关权限级别请查看[权限定义列表](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md) ),需要手动配置高级别的权限签名(具体操作可查看[自动化签名方案](https://gitee.com/link?target=https%3A%2F%2Fdeveloper.harmonyos.com%2Fcn%2Fdocs%2Fdocumentation%2Fdoc-guides%2Fohos-auto-configuring-signature-information-0000001271659465) ) 。 ### 下载 diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/Index.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/Index.ets index 391fc3f88e051cdc02e7d590e0a0d61f99bb992f..aee7d5d54eeb08d0cdc0d2d1992d202be1390f68 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/Index.ets @@ -21,7 +21,7 @@ import { notificationUtil } from '../notification/NotificationUtil'; // 常量定义 const TITLE_FONT_SIZE = 35; // 标题字体大小 -const BUTTON_FONT_SIZE = 45; // 按钮字体大小 +const BUTTON_FONT_SIZE = 25; // 按钮字体大小 const BUTTON_MARGIN = 16; // 按钮边距 @Entry @@ -47,7 +47,7 @@ struct Index { }) // Start VPN 按钮 - Button('Start VPN') + Button($r('app.string.Start_VPN')) .onClick(() => { Logger.info('developTag', '%{public}s', 'Succeeded in clicking the button.'); router.pushUrl({ url: 'pages/StartVpn' }).then(() => { @@ -65,7 +65,7 @@ struct Index { .margin(BUTTON_MARGIN) // Stop VPN 按钮 - Button('Stop VPN') + Button($r('app.string.Stop_VPN')) .onClick(() => { Logger.info('developTag', '%{public}s', 'Succeeded in clicking the button.'); router.pushUrl({ url: 'pages/StopVpn' }).then(() => { diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/StartVpn.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/StartVpn.ets index 47cf5a2ec7d2926eea3c35ee01b9622ba391f6cb..75ac05e8d691aefcb7c7f4e1cb960a962e4b244a 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/StartVpn.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/StartVpn.ets @@ -26,15 +26,15 @@ import NotificationOperations from '../notification/NotificationOperations'; // 提取常量 const TITLE_FONT_SIZE = 35; // 标题字体大小 -const LABEL_FONT_SIZE = 30; // 标签字体大小 -const BUTTON_FONT_SIZE = 50; // 按钮字体大小 +const LABEL_FONT_SIZE = 20; // 标签字体大小 +const BUTTON_FONT_SIZE = 25; // 按钮字体大小 const INPUT_MARGIN = 2; // 输入框边距 const BUTTON_SUCCESS_MESSAGE = 4000; // Toast 显示时间 const BUTTON_MARGIN = 16; let want: Want = { deviceId: '', - bundleName: 'com.example.myvpndemo', + bundleName: 'com.samples.vpncontrol_case', abilityName: 'MyVpnExtAbility', }; @@ -247,7 +247,7 @@ struct StartVpn { .margin(INPUT_MARGIN) }.width('90%') - Button('CreateTunnel') + Button($r('app.string.CreateTunnel')) .onClick(() => { this.CreateTunnel(); }) @@ -255,7 +255,7 @@ struct StartVpn { .id(ComponentId.CREATE_TUNNEL_BUTTON) .fontSize(BUTTON_FONT_SIZE) .margin(BUTTON_MARGIN); - Button('Protect') + Button($r('app.string.Protect')) .onClick(() => { this.Protect(); }) @@ -263,15 +263,8 @@ struct StartVpn { .id(ComponentId.PROTECT_BUTTON) .fontSize(BUTTON_FONT_SIZE) .margin(BUTTON_MARGIN); - Button('SetupVpn') - .onClick(() => { - this.SetupVpn(); - }) - .width('70%') - .id(ComponentId.SETUP_VPN_BUTTON) - .fontSize(BUTTON_FONT_SIZE) - .margin(BUTTON_MARGIN); - Button('start_vpnExt') + // [Start start_vpn_extension_ability] + Button($r('app.string.start_vpnExt')) .onClick(() => { try { vpnext.startVpnExtensionAbility(want).then(() => { @@ -289,7 +282,15 @@ struct StartVpn { .id(ComponentId.START_VPN_EXT_BUTTON) .fontSize(BUTTON_FONT_SIZE) .margin(BUTTON_MARGIN) - + // [End start_vpn_extension_ability] + Button($r('app.string.SetupVpn')) + .onClick(() => { + this.SetupVpn(); + }) + .width('70%') + .id(ComponentId.SETUP_VPN_BUTTON) + .fontSize(BUTTON_FONT_SIZE) + .margin(BUTTON_MARGIN); }.width('100%'); }.height('100%'); diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/StopVpn.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/StopVpn.ets index 720a038f8661014fbea6b4afaea33fa828b131fd..779f85e0ad66d907043a5e9ec772f07a7d62b6f9 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/StopVpn.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/pages/StopVpn.ets @@ -24,13 +24,13 @@ import Logger from '../common/Logger'; // 常量提取 const TITLE_FONT_SIZE = 35; // 标题字体大小 -const BUTTON_FONT_SIZE = 50; // 按钮字体大小 +const BUTTON_FONT_SIZE = 25; // 按钮字体大小 const TOAST_DURATION = 2000; // Toast 显示时间 const BUTTON_MARGIN = 16; let want: Want = { deviceId: '', - bundleName: 'com.example.myvpndemo', + bundleName: 'com.samples.vpncontrol_case', abilityName: 'MyVpnExtAbility', }; let g_tunnelFd = -1; @@ -68,7 +68,7 @@ struct StopVpn { .onClick(() => { Logger.info('developTag', '%{public}s', 'vpn Client'); }) - Button('stop vpn') + Button($r('app.string.stop_vpn')) .onClick(() => { this.Destroy(); }) @@ -76,7 +76,8 @@ struct StopVpn { .id(ComponentId.INNER_STOP_VPN_BUTTON) .fontSize(BUTTON_FONT_SIZE) .margin(BUTTON_MARGIN) - Button('stop vpnExt') + // [Start stop_vpn_extension_ability] + Button($r('app.string.stop_vpnExt')) .onClick(() => { try { vpnext.stopVpnExtensionAbility(want).then(() => { @@ -94,6 +95,7 @@ struct StopVpn { .id(ComponentId.STOP_VPN_EXT_BUTTON) .fontSize(BUTTON_FONT_SIZE) .margin(BUTTON_MARGIN) + // [End stop_vpn_extension_ability] }.width('100%'); }.height('100%'); } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/vpnability/VPNExtentionAbility.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/vpnability/VPNExtentionAbility.ets index 188ea4d37f693db5e594506888fb79dc944eb09a..35ad1a27ca6d9e3f61e9992b06e4df6b7ba5d8a8 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/vpnability/VPNExtentionAbility.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/ets/vpnability/VPNExtentionAbility.ets @@ -69,6 +69,7 @@ export default class MyVpnExtAbility extends VpnExtensionAbility { this.Destroy(); } +// [Start call_the_ondestroy_method] Destroy() { Logger.info('developTag', '%{public}s', 'vpn Destroy'); // 关闭VPN @@ -78,6 +79,7 @@ export default class MyVpnExtAbility extends VpnExtensionAbility { Logger.error('developTag', 'vpn Destroy Failed: %{public}s', JSON.stringify(err) ?? ''); }); } +// [End call_the_ondestroy_method] // 创建隧道的方法 CreateTunnel() { diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/module.json5 b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/module.json5 index f9eda2b5e2e488de9f59923e4b4b27a770526031..c435627e6c355c920f622b8e7dd21030fd523b48 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/module.json5 +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/module.json5 @@ -61,21 +61,24 @@ } ] }, + // [Start create_vpn_extension_ability] { "name": "MyVpnExtAbility", "srcEntry": "./ets/vpnability/VPNExtentionAbility.ets", "type": "vpn" } + // [End create_vpn_extension_ability] ], "requestPermissions": [ { - "name": "ohos.permission.INTERNET" - }, - { - "name": "ohos.permission.MANAGE_VPN" - }, - { - "name": "ohos.permission.NOTIFICATION_CONTROLLER" + "name": "ohos.permission.INTERNET", + "reason": "$string:grant_internet", + "usedScene": { + "abilities": [ + "MainAbility" + ], + "when": "inuse" + } } ], } diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/base/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/base/element/string.json index 770336643944ddf67851b717352a302e3a4a3722..554bb6263616244ed21cd8db47495066742e32b4 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/base/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/base/element/string.json @@ -45,8 +45,36 @@ "value": "vpn_clickable_notification" }, { - "name": "vpn_clickable_information", - "value": "vpn_clickable_information" + "name": "Start_VPN", + "value": "Startup interface" + }, + { + "name": "Stop_VPN", + "value": "Shutdown interface" + }, + { + "name": "CreateTunnel", + "value": "CreateTunnel" + }, + { + "name": "Protect", + "value": "Protect" + }, + { + "name": "start_vpnExt", + "value": "Start_vpnExt" + }, + { + "name": "SetupVpn", + "value": "SetupVpn" + }, + { + "name": "stop_vpn", + "value": "Shutdown vpn" + }, + { + "name": "stop_vpnExt", + "value": "Shutdown vpn_Ext" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/en_US/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/en_US/element/string.json index 51a6c2c64dcf13576b44066ee3820c9681ed8428..9a985dcb0bd4c29b6fbdc7321427e77d0db405e8 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/en_US/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/en_US/element/string.json @@ -47,6 +47,42 @@ { "name": "Allow", "value": "Allow" + }, + { + "name": "Start_VPN", + "value": "Startup interface" + }, + { + "name": "Stop_VPN", + "value": "Shutdown interface" + }, + { + "name": "CreateTunnel", + "value": "CreateTunnel" + }, + { + "name": "Protect", + "value": "Protect" + }, + { + "name": "start_vpnExt", + "value": "Start vpnExt" + }, + { + "name": "SetupVpn", + "value": "Setup Vpn" + }, + { + "name": "stop_vpn", + "value": "Shutdown Vpn" + }, + { + "name": "stop_vpnExt", + "value": "Shutdown Vpn_Ext" + }, + { + "name": "grant_internet", + "value": "grant_internet" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/zh_CN/element/string.json b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/zh_CN/element/string.json index 423ad973170cd7837be6c442878edaed4f0e3901..bc978b9eea87ecd9236d6736763efe454b9c129b 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/zh_CN/element/string.json +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/main/resources/zh_CN/element/string.json @@ -10,7 +10,7 @@ }, { "name": "EntryAbility_label", - "value": "VPN_Case" + "value": "VPN示例" }, { "name": "VPNExtensionAbility_desc", @@ -47,6 +47,42 @@ { "name": "Allow", "value": "允许" + }, + { + "name": "Start_VPN", + "value": "启动接口" + }, + { + "name": "Stop_VPN", + "value": "关闭接口" + }, + { + "name": "CreateTunnel", + "value": "创建隧道" + }, + { + "name": "Protect", + "value": "保护隧道" + }, + { + "name": "start_vpnExt", + "value": "启动VPN拓展程序" + }, + { + "name": "SetupVpn", + "value": "启动VPN" + }, + { + "name": "stop_vpn", + "value": "关闭VPN" + }, + { + "name": "stop_vpnExt", + "value": "关闭VPN拓展程序" + }, + { + "name": "grant_internet", + "value": "网络使用权限" } ] } \ No newline at end of file diff --git a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/ohosTest/ets/test/Ability.test.ets b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/ohosTest/ets/test/Ability.test.ets index cc1d42deb6f462963e2f96d668df354264215de1..47b9c91355c18aa18e6e1b8a30d7387c0a7dd9f0 100644 --- a/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/ohosTest/ets/test/Ability.test.ets +++ b/code/DocsSample/NetWork_Kit/NetWorkKit_NetManager/VPNControl_Case/entry/src/ohosTest/ets/test/Ability.test.ets @@ -22,7 +22,6 @@ import Logger from '../../../main/ets/common/Logger'; const BUNDLE = 'VPNCASE_'; const BUNDLE_NAME = 'com.samples.vpncontrol_case'; const ABILITY_NAME: string = 'EntryAbility'; -let driver: Driver = Driver.create(); const DELAY_TIME = 2000; const delegator = abilityDelegatorRegistry.getAbilityDelegator(); @@ -35,6 +34,7 @@ async function getResourceString(resource: Resource): Promise { } async function goBack() { + let driver: Driver = Driver.create(); await driver.assertComponentExist(ON.id('btnBack')); let backButton = await driver.findComponent(ON.id('btnBack')); await backButton.click(); @@ -55,6 +55,7 @@ export default function VPNTest() { bundleName: BUNDLE_NAME, abilityName: ABILITY_NAME, }; + let driver: Driver = Driver.create(); await delegator.startAbility(want); await driver.delayMs(DELAY_TIME); let str = await getResourceString($r('app.string.Allow')); @@ -75,6 +76,7 @@ export default function VPNTest() { * @tc.desc 测试 StartVPN 按钮点击事件 */ it(BUNDLE + 'StartVPNButton_001', 0, async (done: Function) => { + let driver: Driver = Driver.create(); Logger.info(`${BUNDLE_NAME} StartVPNButton_001 begin`); // 验证StartVPN按钮存在并点击 await driver.delayMs(DELAY_TIME); @@ -103,6 +105,7 @@ export default function VPNTest() { * @tc.desc 测试 CreateTunnel 按钮点击事件 */ it(BUNDLE + 'CreateTunnelButton_001', 0, async (done: Function) => { + let driver: Driver = Driver.create(); Logger.info(`${BUNDLE_NAME} CreateTunnelButton_001 begin`); await driver.delayMs(DELAY_TIME); await driver.assertComponentExist(ON.id(ComponentId.CREATE_TUNNEL_BUTTON)); @@ -130,6 +133,7 @@ export default function VPNTest() { * @tc.desc 测试 Protect 按钮点击事件 */ it(BUNDLE + 'ProtectButton_001', 0, async (done: Function) => { + let driver: Driver = Driver.create(); Logger.info(`${BUNDLE_NAME} ProtectButton_001 begin`); await driver.delayMs(DELAY_TIME); await driver.assertComponentExist(ON.id(ComponentId.PROTECT_BUTTON)); @@ -151,39 +155,13 @@ export default function VPNTest() { done(); }); - /** - * @tc.number SetupVpnButton_001 - * @tc.name SetupVpnButton_001 - * @tc.desc 测试 SetupVpn 按钮点击事件 - */ - it(BUNDLE + 'SetupVpnButton_001', 0, async (done: Function) => { - Logger.info(`${BUNDLE_NAME} SetupVpnButton_001 begin`); - await driver.delayMs(DELAY_TIME); - await driver.assertComponentExist(ON.id(ComponentId.SETUP_VPN_BUTTON)); - const setupVpnButton = await driver.findComponent(ON.id(ComponentId.SETUP_VPN_BUTTON)); - await setupVpnButton.click(); - await driver.delayMs(DELAY_TIME); - try { - let errorComponent = await driver.findComponent(ON.id('Error')); - if (errorComponent) { - let errorText = await errorComponent.getText(); - Logger.error(`${BUNDLE_NAME} SetupVpnButton_001 failed with error: ${errorText}`); - expect(false).assertTrue(); // 如果有 Error 组件,测试失败 - } - } catch (e) { - Logger.info(`${BUNDLE_NAME} SetupVpnButton_001 passed: No error component found.`); - expect(true).assertTrue(); // 如果没有 Error 组件,测试通过 - } - Logger.info(`${BUNDLE_NAME} SetupVpnButton_001 end`); - done(); - }); - /** * @tc.number StartVpnExtButton_001 * @tc.name StartVpnExtButton_001 * @tc.desc 测试 StartVpnExt 按钮点击事件 */ it(BUNDLE + 'StartVpnExtButton_001', 0, async (done: Function) => { + let driver: Driver = Driver.create(); Logger.info(`${BUNDLE_NAME} StartVpnExtButton_001 begin`); await driver.delayMs(DELAY_TIME); await driver.assertComponentExist(ON.id(ComponentId.START_VPN_EXT_BUTTON)); @@ -195,7 +173,6 @@ export default function VPNTest() { let confirmButton: Component = await driver.findComponent(ON.text(str)); await confirmButton.click(); await driver.delayMs(DELAY_TIME); - await goBack(); try { let errorComponent = await driver.findComponent(ON.id('Error')); if (errorComponent) { @@ -211,6 +188,34 @@ export default function VPNTest() { done(); }); + /** + * @tc.number SetupVpnButton_001 + * @tc.name SetupVpnButton_001 + * @tc.desc 测试 SetupVpn 按钮点击事件 + */ + it(BUNDLE + 'SetupVpnButton_001', 0, async (done: Function) => { + let driver: Driver = Driver.create(); + Logger.info(`${BUNDLE_NAME} SetupVpnButton_001 begin`); + await driver.delayMs(DELAY_TIME); + await driver.assertComponentExist(ON.id(ComponentId.SETUP_VPN_BUTTON)); + const setupVpnButton = await driver.findComponent(ON.id(ComponentId.SETUP_VPN_BUTTON)); + await setupVpnButton.click(); + await driver.delayMs(DELAY_TIME); + await goBack(); + try { + let errorComponent = await driver.findComponent(ON.id('Error')); + if (errorComponent) { + let errorText = await errorComponent.getText(); + Logger.error(`${BUNDLE_NAME} SetupVpnButton_001 failed with error: ${errorText}`); + expect(false).assertTrue(); // 如果有 Error 组件,测试失败 + } + } catch (e) { + Logger.info(`${BUNDLE_NAME} SetupVpnButton_001 passed: No error component found.`); + expect(true).assertTrue(); // 如果没有 Error 组件,测试通过 + } + Logger.info(`${BUNDLE_NAME} SetupVpnButton_001 end`); + done(); + }); /** * @tc.number StopButton_001 @@ -218,6 +223,7 @@ export default function VPNTest() { * @tc.desc 测试 StopVPN 按钮点击事件 */ it(BUNDLE + 'StopButton_001', 0, async (done: Function) => { + let driver: Driver = Driver.create(); Logger.info(`${BUNDLE_NAME} StopButton_001 begin`); // 验证StopVPN按钮存在并点击 await driver.delayMs(DELAY_TIME); @@ -246,6 +252,7 @@ export default function VPNTest() { * @tc.desc 测试 StopVPN 按钮点击事件 */ it(BUNDLE + 'StopVpnButton_001', 0, async (done: Function) => { + let driver: Driver = Driver.create(); Logger.info(`${BUNDLE_NAME} StopVpnButton_001 begin`); // 验证 stopVpn 按钮是否存在并点击 await driver.delayMs(DELAY_TIME); @@ -275,6 +282,7 @@ export default function VPNTest() { * @tc.desc 测试 StopVpnExt 按钮点击事件 */ it(BUNDLE + 'StopVpnExtButton_001', 0, async (done: Function) => { + let driver: Driver = Driver.create(); Logger.info(`${BUNDLE_NAME} StopVpnExtButton_001 begin`); // 验证 stopVpnExt 按钮是否存在并点击 await driver.delayMs(DELAY_TIME);