@capgo/capacitor-wifi 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ require 'json'
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = 'CapgoCapacitorWifi'
7
+ s.version = package['version']
8
+ s.summary = package['description']
9
+ s.license = package['license']
10
+ s.homepage = package['repository']['url']
11
+ s.author = package['author']
12
+ s.source = { :git => package['repository']['url'], :tag => s.version.to_s }
13
+ s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}'
14
+ s.ios.deployment_target = '14.0'
15
+ s.dependency 'Capacitor'
16
+ s.swift_version = '5.1'
17
+ end
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Martin Donadieu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/Package.swift ADDED
@@ -0,0 +1,30 @@
1
+ // swift-tools-version: 5.9
2
+ import PackageDescription
3
+
4
+ let package = Package(
5
+ name: "CapgoCapacitorWifi",
6
+ platforms: [.iOS(.v14)],
7
+ products: [
8
+ .library(
9
+ name: "CapgoCapacitorWifi",
10
+ targets: ["CapacitorWifiPlugin"])
11
+ ],
12
+ dependencies: [
13
+ .package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", from: "7.0.0")
14
+ ],
15
+ targets: [
16
+ .target(
17
+ name: "CapacitorWifiPlugin",
18
+ dependencies: [
19
+ .product(name: "Capacitor", package: "capacitor-swift-pm"),
20
+ .product(name: "Cordova", package: "capacitor-swift-pm")
21
+ ],
22
+ path: "ios/Sources/CapacitorWifiPlugin"
23
+ ),
24
+ .testTarget(
25
+ name: "CapacitorWifiPluginTests",
26
+ dependencies: ["CapacitorWifiPlugin"],
27
+ path: "ios/Tests/CapacitorWifiPluginTests"
28
+ )
29
+ ]
30
+ )
package/README.md ADDED
@@ -0,0 +1,450 @@
1
+ # @capgo/capacitor-wifi
2
+ <a href="https://capgo.app/"><img src='https://raw.githubusercontent.com/Cap-go/capgo/main/assets/capgo_banner.png' alt='Capgo - Instant updates for capacitor'/></a>
3
+
4
+ <div align="center">
5
+ <h2><a href="https://capgo.app/?ref=plugin_wifi"> ➡️ Get Instant updates for your App with Capgo</a></h2>
6
+ <h2><a href="https://capgo.app/consulting/?ref=plugin_wifi"> Missing a feature? We'll build the plugin for you 💪</a></h2>
7
+ </div>
8
+
9
+ Manage WiFi connectivity for your Capacitor app
10
+
11
+ ## Why Capacitor WiFi?
12
+
13
+ A free and powerful WiFi management plugin with modern platform support:
14
+
15
+ - **Network management** - Connect, disconnect, and add WiFi networks programmatically
16
+ - **Network scanning** - Discover available WiFi networks (Android only)
17
+ - **Network info** - Get SSID, IP address, and signal strength (RSSI)
18
+ - **Modern APIs** - Uses NetworkExtension (iOS) and handles Android 10+ restrictions
19
+ - **Cross-platform** - Consistent API across iOS and Android
20
+
21
+ Perfect for IoT apps, network diagnostic tools, and smart home applications.
22
+
23
+ ## Documentation
24
+
25
+ The most complete doc is available here: https://capgo.app/docs/plugins/wifi/
26
+
27
+ ## Install
28
+
29
+ ```bash
30
+ npm install @capgo/capacitor-wifi
31
+ npx cap sync
32
+ ```
33
+
34
+ ## Requirements
35
+
36
+ - **iOS**: Requires location permission (`NSLocationWhenInUseUsageDescription` in Info.plist) to access WiFi information. Uses NetworkExtension framework.
37
+ - **Android**: Requires location permissions. Network scanning and RSSI available on Android only. Android 10+ uses system dialogs for adding networks.
38
+
39
+ ## API
40
+
41
+ <docgen-index>
42
+
43
+ * [`addNetwork(...)`](#addnetwork)
44
+ * [`connect(...)`](#connect)
45
+ * [`disconnect(...)`](#disconnect)
46
+ * [`getAvailableNetworks()`](#getavailablenetworks)
47
+ * [`getIpAddress()`](#getipaddress)
48
+ * [`getRssi()`](#getrssi)
49
+ * [`getSsid()`](#getssid)
50
+ * [`isEnabled()`](#isenabled)
51
+ * [`startScan()`](#startscan)
52
+ * [`checkPermissions()`](#checkpermissions)
53
+ * [`requestPermissions(...)`](#requestpermissions)
54
+ * [`addListener('networksScanned', ...)`](#addlistenernetworksscanned-)
55
+ * [`removeAllListeners()`](#removealllisteners)
56
+ * [`getPluginVersion()`](#getpluginversion)
57
+ * [Interfaces](#interfaces)
58
+ * [Type Aliases](#type-aliases)
59
+ * [Enums](#enums)
60
+
61
+ </docgen-index>
62
+
63
+ <docgen-api>
64
+ <!--Update the source file JSDoc comments and rerun docgen to update the docs below-->
65
+
66
+ WiFi plugin for managing device WiFi connectivity
67
+
68
+ ### addNetwork(...)
69
+
70
+ ```typescript
71
+ addNetwork(options: AddNetworkOptions) => Promise<void>
72
+ ```
73
+
74
+ Show a system dialog to add a Wi-Fi network to the device.
75
+ On Android SDK 30+, this opens the system Wi-Fi settings with the network pre-filled.
76
+ On iOS, this connects to the network directly.
77
+
78
+ | Param | Type | Description |
79
+ | ------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
80
+ | **`options`** | <code><a href="#addnetworkoptions">AddNetworkOptions</a></code> | - <a href="#network">Network</a> configuration options |
81
+
82
+ **Since:** 7.0.0
83
+
84
+ --------------------
85
+
86
+
87
+ ### connect(...)
88
+
89
+ ```typescript
90
+ connect(options: ConnectOptions) => Promise<void>
91
+ ```
92
+
93
+ Connect to a Wi-Fi network.
94
+ On Android, this creates a temporary connection that doesn't route traffic through the network by default.
95
+ For a persistent connection on Android, use addNetwork() instead.
96
+ On iOS, this creates a persistent connection.
97
+
98
+ | Param | Type | Description |
99
+ | ------------- | --------------------------------------------------------- | -------------------- |
100
+ | **`options`** | <code><a href="#connectoptions">ConnectOptions</a></code> | - Connection options |
101
+
102
+ **Since:** 7.0.0
103
+
104
+ --------------------
105
+
106
+
107
+ ### disconnect(...)
108
+
109
+ ```typescript
110
+ disconnect(options?: DisconnectOptions | undefined) => Promise<void>
111
+ ```
112
+
113
+ Disconnect from the current Wi-Fi network.
114
+ On iOS, only disconnects from networks that were added via this plugin.
115
+
116
+ | Param | Type | Description |
117
+ | ------------- | --------------------------------------------------------------- | ----------------------------- |
118
+ | **`options`** | <code><a href="#disconnectoptions">DisconnectOptions</a></code> | - Optional disconnect options |
119
+
120
+ **Since:** 7.0.0
121
+
122
+ --------------------
123
+
124
+
125
+ ### getAvailableNetworks()
126
+
127
+ ```typescript
128
+ getAvailableNetworks() => Promise<GetAvailableNetworksResult>
129
+ ```
130
+
131
+ Get a list of available Wi-Fi networks from the last scan.
132
+ Only available on Android.
133
+
134
+ **Returns:** <code>Promise&lt;<a href="#getavailablenetworksresult">GetAvailableNetworksResult</a>&gt;</code>
135
+
136
+ **Since:** 7.0.0
137
+
138
+ --------------------
139
+
140
+
141
+ ### getIpAddress()
142
+
143
+ ```typescript
144
+ getIpAddress() => Promise<GetIpAddressResult>
145
+ ```
146
+
147
+ Get the device's current IP address.
148
+ Available on both Android and iOS.
149
+
150
+ **Returns:** <code>Promise&lt;<a href="#getipaddressresult">GetIpAddressResult</a>&gt;</code>
151
+
152
+ **Since:** 7.0.0
153
+
154
+ --------------------
155
+
156
+
157
+ ### getRssi()
158
+
159
+ ```typescript
160
+ getRssi() => Promise<GetRssiResult>
161
+ ```
162
+
163
+ Get the received signal strength indicator (RSSI) of the current network in dBm.
164
+ Only available on Android.
165
+
166
+ **Returns:** <code>Promise&lt;<a href="#getrssiresult">GetRssiResult</a>&gt;</code>
167
+
168
+ **Since:** 7.0.0
169
+
170
+ --------------------
171
+
172
+
173
+ ### getSsid()
174
+
175
+ ```typescript
176
+ getSsid() => Promise<GetSsidResult>
177
+ ```
178
+
179
+ Get the service set identifier (SSID) of the current network.
180
+ Available on both Android and iOS.
181
+
182
+ **Returns:** <code>Promise&lt;<a href="#getssidresult">GetSsidResult</a>&gt;</code>
183
+
184
+ **Since:** 7.0.0
185
+
186
+ --------------------
187
+
188
+
189
+ ### isEnabled()
190
+
191
+ ```typescript
192
+ isEnabled() => Promise<IsEnabledResult>
193
+ ```
194
+
195
+ Check if Wi-Fi is enabled on the device.
196
+ Only available on Android.
197
+
198
+ **Returns:** <code>Promise&lt;<a href="#isenabledresult">IsEnabledResult</a>&gt;</code>
199
+
200
+ **Since:** 7.0.0
201
+
202
+ --------------------
203
+
204
+
205
+ ### startScan()
206
+
207
+ ```typescript
208
+ startScan() => Promise<void>
209
+ ```
210
+
211
+ Start scanning for Wi-Fi networks.
212
+ Only available on Android.
213
+ Results are delivered via the 'networksScanned' event listener.
214
+ Note: May fail due to system throttling or hardware issues.
215
+
216
+ **Since:** 7.0.0
217
+
218
+ --------------------
219
+
220
+
221
+ ### checkPermissions()
222
+
223
+ ```typescript
224
+ checkPermissions() => Promise<PermissionStatus>
225
+ ```
226
+
227
+ Check the current permission status for location access.
228
+ Location permission is required for Wi-Fi operations on both platforms.
229
+
230
+ **Returns:** <code>Promise&lt;<a href="#permissionstatus">PermissionStatus</a>&gt;</code>
231
+
232
+ **Since:** 7.0.0
233
+
234
+ --------------------
235
+
236
+
237
+ ### requestPermissions(...)
238
+
239
+ ```typescript
240
+ requestPermissions(options?: RequestPermissionsOptions | undefined) => Promise<PermissionStatus>
241
+ ```
242
+
243
+ Request location permissions from the user.
244
+ Location permission is required for Wi-Fi operations on both platforms.
245
+
246
+ | Param | Type | Description |
247
+ | ------------- | ------------------------------------------------------------------------------- | ------------------------------------- |
248
+ | **`options`** | <code><a href="#requestpermissionsoptions">RequestPermissionsOptions</a></code> | - Optional permission request options |
249
+
250
+ **Returns:** <code>Promise&lt;<a href="#permissionstatus">PermissionStatus</a>&gt;</code>
251
+
252
+ **Since:** 7.0.0
253
+
254
+ --------------------
255
+
256
+
257
+ ### addListener('networksScanned', ...)
258
+
259
+ ```typescript
260
+ addListener(eventName: 'networksScanned', listenerFunc: () => void) => Promise<PluginListenerHandle>
261
+ ```
262
+
263
+ Add a listener for the 'networksScanned' event.
264
+ Only available on Android.
265
+ This event is fired when Wi-Fi scan results are available.
266
+
267
+ | Param | Type | Description |
268
+ | ------------------ | ------------------------------ | ------------------------------------ |
269
+ | **`eventName`** | <code>'networksScanned'</code> | - The event name ('networksScanned') |
270
+ | **`listenerFunc`** | <code>() =&gt; void</code> | - The callback function to execute |
271
+
272
+ **Returns:** <code>Promise&lt;<a href="#pluginlistenerhandle">PluginListenerHandle</a>&gt;</code>
273
+
274
+ **Since:** 7.0.0
275
+
276
+ --------------------
277
+
278
+
279
+ ### removeAllListeners()
280
+
281
+ ```typescript
282
+ removeAllListeners() => Promise<void>
283
+ ```
284
+
285
+ Remove all listeners for this plugin.
286
+
287
+ **Since:** 7.0.0
288
+
289
+ --------------------
290
+
291
+
292
+ ### getPluginVersion()
293
+
294
+ ```typescript
295
+ getPluginVersion() => Promise<{ version: string; }>
296
+ ```
297
+
298
+ Get the native plugin version.
299
+
300
+ **Returns:** <code>Promise&lt;{ version: string; }&gt;</code>
301
+
302
+ **Since:** 7.0.0
303
+
304
+ --------------------
305
+
306
+
307
+ ### Interfaces
308
+
309
+
310
+ #### AddNetworkOptions
311
+
312
+ Options for adding a network
313
+
314
+ | Prop | Type | Description | Default | Since |
315
+ | ------------------ | ------------------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------------- | ----- |
316
+ | **`ssid`** | <code>string</code> | The SSID of the network to add | | 7.0.0 |
317
+ | **`password`** | <code>string</code> | The password for the network (optional for open networks) | | 7.0.0 |
318
+ | **`isHiddenSsid`** | <code>boolean</code> | Whether the network is hidden (Android only) | <code>false</code> | 7.0.0 |
319
+ | **`securityType`** | <code><a href="#networksecuritytype">NetworkSecurityType</a></code> | The security type of the network (Android only) | <code>NetworkSecurityType.WPA2_PSK</code> | 7.0.0 |
320
+
321
+
322
+ #### ConnectOptions
323
+
324
+ Options for connecting to a network
325
+
326
+ | Prop | Type | Description | Default | Since |
327
+ | ------------------ | -------------------- | --------------------------------------------------------- | ------------------ | ----- |
328
+ | **`ssid`** | <code>string</code> | The SSID of the network to connect to | | 7.0.0 |
329
+ | **`password`** | <code>string</code> | The password for the network (optional for open networks) | | 7.0.0 |
330
+ | **`isHiddenSsid`** | <code>boolean</code> | Whether the network is hidden (Android only) | <code>false</code> | 7.0.0 |
331
+
332
+
333
+ #### DisconnectOptions
334
+
335
+ Options for disconnecting from a network
336
+
337
+ | Prop | Type | Description | Since |
338
+ | ---------- | ------------------- | ----------------------------------------------------- | ----- |
339
+ | **`ssid`** | <code>string</code> | The SSID of the network to disconnect from (optional) | 7.0.0 |
340
+
341
+
342
+ #### GetAvailableNetworksResult
343
+
344
+ Result from getAvailableNetworks()
345
+
346
+ | Prop | Type | Description | Since |
347
+ | -------------- | ---------------------- | -------------------------- | ----- |
348
+ | **`networks`** | <code>Network[]</code> | List of available networks | 7.0.0 |
349
+
350
+
351
+ #### Network
352
+
353
+ Represents a Wi-Fi network
354
+
355
+ | Prop | Type | Description | Since |
356
+ | ------------------- | ---------------------------------- | ------------------------------------------------------------------- | ----- |
357
+ | **`ssid`** | <code>string</code> | The SSID of the network | 7.0.0 |
358
+ | **`rssi`** | <code>number</code> | The signal strength in dBm | 7.0.0 |
359
+ | **`securityTypes`** | <code>NetworkSecurityType[]</code> | The security types supported by this network (Android SDK 33+ only) | 7.0.0 |
360
+
361
+
362
+ #### GetIpAddressResult
363
+
364
+ Result from getIpAddress()
365
+
366
+ | Prop | Type | Description | Since |
367
+ | --------------- | ------------------- | ----------------------- | ----- |
368
+ | **`ipAddress`** | <code>string</code> | The device's IP address | 7.0.0 |
369
+
370
+
371
+ #### GetRssiResult
372
+
373
+ Result from getRssi()
374
+
375
+ | Prop | Type | Description | Since |
376
+ | ---------- | ------------------- | -------------------------- | ----- |
377
+ | **`rssi`** | <code>number</code> | The signal strength in dBm | 7.0.0 |
378
+
379
+
380
+ #### GetSsidResult
381
+
382
+ Result from getSsid()
383
+
384
+ | Prop | Type | Description | Since |
385
+ | ---------- | ------------------- | ------------------------------- | ----- |
386
+ | **`ssid`** | <code>string</code> | The SSID of the current network | 7.0.0 |
387
+
388
+
389
+ #### IsEnabledResult
390
+
391
+ Result from isEnabled()
392
+
393
+ | Prop | Type | Description | Since |
394
+ | ------------- | -------------------- | ------------------------ | ----- |
395
+ | **`enabled`** | <code>boolean</code> | Whether Wi-Fi is enabled | 7.0.0 |
396
+
397
+
398
+ #### PermissionStatus
399
+
400
+ Permission status
401
+
402
+ | Prop | Type | Description | Since |
403
+ | -------------- | ----------------------------------------------------------- | ------------------------- | ----- |
404
+ | **`location`** | <code><a href="#permissionstate">PermissionState</a></code> | Location permission state | 7.0.0 |
405
+
406
+
407
+ #### RequestPermissionsOptions
408
+
409
+ Options for requesting permissions
410
+
411
+ | Prop | Type | Description | Since |
412
+ | ----------------- | ------------------------- | ---------------------- | ----- |
413
+ | **`permissions`** | <code>'location'[]</code> | Permissions to request | 7.0.0 |
414
+
415
+
416
+ #### PluginListenerHandle
417
+
418
+ | Prop | Type |
419
+ | ------------ | ----------------------------------------- |
420
+ | **`remove`** | <code>() =&gt; Promise&lt;void&gt;</code> |
421
+
422
+
423
+ ### Type Aliases
424
+
425
+
426
+ #### PermissionState
427
+
428
+ <code>'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'</code>
429
+
430
+
431
+ ### Enums
432
+
433
+
434
+ #### NetworkSecurityType
435
+
436
+ | Members | Value | Description | Since |
437
+ | ----------------------------- | --------------- | ------------------------------ | ----- |
438
+ | **`OPEN`** | <code>0</code> | Open network with no security | 7.0.0 |
439
+ | **`WEP`** | <code>1</code> | WEP security | 7.0.0 |
440
+ | **`WPA2_PSK`** | <code>2</code> | WPA/WPA2 Personal (PSK) | 7.0.0 |
441
+ | **`EAP`** | <code>3</code> | WPA/WPA2/WPA3 Enterprise (EAP) | 7.0.0 |
442
+ | **`SAE`** | <code>4</code> | WPA3 Personal (SAE) | 7.0.0 |
443
+ | **`WPA3_ENTERPRISE`** | <code>5</code> | WPA3 Enterprise | 7.0.0 |
444
+ | **`WPA3_ENTERPRISE_192_BIT`** | <code>6</code> | WPA3 Enterprise 192-bit mode | 7.0.0 |
445
+ | **`PASSPOINT`** | <code>7</code> | Passpoint network | 7.0.0 |
446
+ | **`OWE`** | <code>8</code> | Enhanced Open (OWE) | 7.0.0 |
447
+ | **`WAPI_PSK`** | <code>9</code> | WAPI PSK | 7.0.0 |
448
+ | **`WAPI_CERT`** | <code>10</code> | WAPI Certificate | 7.0.0 |
449
+
450
+ </docgen-api>
@@ -0,0 +1,59 @@
1
+ ext {
2
+ junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
3
+ androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.2.1'
4
+ androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.6.1'
5
+ androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.7.0'
6
+ }
7
+
8
+ buildscript {
9
+ repositories {
10
+ mavenCentral()
11
+ google()
12
+ }
13
+ dependencies {
14
+ classpath 'com.android.tools.build:gradle:8.7.2'
15
+ }
16
+ }
17
+
18
+ apply plugin: 'com.android.library'
19
+
20
+ android {
21
+ namespace "ee.forgr.plugin.capacitor_wifi"
22
+ compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 35
23
+ defaultConfig {
24
+ minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 23
25
+ targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 35
26
+ versionCode 1
27
+ versionName "1.0"
28
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
29
+ }
30
+ buildTypes {
31
+ release {
32
+ minifyEnabled false
33
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
34
+ }
35
+ }
36
+ lintOptions {
37
+ abortOnError false
38
+ }
39
+ compileOptions {
40
+ sourceCompatibility JavaVersion.VERSION_21
41
+ targetCompatibility JavaVersion.VERSION_21
42
+ }
43
+ }
44
+
45
+ repositories {
46
+ google()
47
+ jcenter()
48
+ mavenCentral()
49
+ }
50
+
51
+
52
+ dependencies {
53
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
54
+ implementation project(':capacitor-android')
55
+ implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
56
+ testImplementation "junit:junit:$junitVersion"
57
+ androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
58
+ androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
59
+ }
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
4
+ <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
5
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
6
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
7
+ <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
8
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
9
+ </manifest>