Showing
2 changed files
with
275 additions
and
0 deletions
androidPrivacy.json
0 → 100644
js_sdk/wa-permission/permission.js
0 → 100644
1 | +/** | |
2 | + * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启 | |
3 | + */ | |
4 | + | |
5 | +var isIos | |
6 | +// #ifdef APP-PLUS | |
7 | +isIos = (plus.os.name == "iOS") | |
8 | +// #endif | |
9 | + | |
10 | +// 判断推送权限是否开启 | |
11 | +function judgeIosPermissionPush() { | |
12 | + var result = false; | |
13 | + var UIApplication = plus.ios.import("UIApplication"); | |
14 | + var app = UIApplication.sharedApplication(); | |
15 | + var enabledTypes = 0; | |
16 | + if (app.currentUserNotificationSettings) { | |
17 | + var settings = app.currentUserNotificationSettings(); | |
18 | + enabledTypes = settings.plusGetAttribute("types"); | |
19 | + console.log("enabledTypes1:" + enabledTypes); | |
20 | + if (enabledTypes == 0) { | |
21 | + console.log("推送权限没有开启"); | |
22 | + } else { | |
23 | + result = true; | |
24 | + console.log("已经开启推送功能!") | |
25 | + } | |
26 | + plus.ios.deleteObject(settings); | |
27 | + } else { | |
28 | + enabledTypes = app.enabledRemoteNotificationTypes(); | |
29 | + if (enabledTypes == 0) { | |
30 | + console.log("推送权限没有开启!"); | |
31 | + } else { | |
32 | + result = true; | |
33 | + console.log("已经开启推送功能!") | |
34 | + } | |
35 | + console.log("enabledTypes2:" + enabledTypes); | |
36 | + } | |
37 | + plus.ios.deleteObject(app); | |
38 | + plus.ios.deleteObject(UIApplication); | |
39 | + return result; | |
40 | +} | |
41 | + | |
42 | +// 判断定位权限是否开启 | |
43 | +function judgeIosPermissionLocation() { | |
44 | + var result = false; | |
45 | + var cllocationManger = plus.ios.import("CLLocationManager"); | |
46 | + var status = cllocationManger.authorizationStatus(); | |
47 | + result = (status != 2) | |
48 | + console.log("定位权限开启:" + result); | |
49 | + // 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation | |
50 | + /* var enable = cllocationManger.locationServicesEnabled(); | |
51 | + var status = cllocationManger.authorizationStatus(); | |
52 | + console.log("enable:" + enable); | |
53 | + console.log("status:" + status); | |
54 | + if (enable && status != 2) { | |
55 | + result = true; | |
56 | + console.log("手机定位服务已开启且已授予定位权限"); | |
57 | + } else { | |
58 | + console.log("手机系统的定位没有打开或未给予定位权限"); | |
59 | + } */ | |
60 | + plus.ios.deleteObject(cllocationManger); | |
61 | + return result; | |
62 | +} | |
63 | + | |
64 | +// 判断麦克风权限是否开启 | |
65 | +function judgeIosPermissionRecord() { | |
66 | + var result = false; | |
67 | + var avaudiosession = plus.ios.import("AVAudioSession"); | |
68 | + var avaudio = avaudiosession.sharedInstance(); | |
69 | + var permissionStatus = avaudio.recordPermission(); | |
70 | + console.log("permissionStatus:" + permissionStatus); | |
71 | + if (permissionStatus == 1684369017 || permissionStatus == 1970168948) { | |
72 | + console.log("麦克风权限没有开启"); | |
73 | + } else { | |
74 | + result = true; | |
75 | + console.log("麦克风权限已经开启"); | |
76 | + } | |
77 | + plus.ios.deleteObject(avaudiosession); | |
78 | + return result; | |
79 | +} | |
80 | + | |
81 | +// 判断相机权限是否开启 | |
82 | +function judgeIosPermissionCamera() { | |
83 | + var result = false; | |
84 | + var AVCaptureDevice = plus.ios.import("AVCaptureDevice"); | |
85 | + var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide'); | |
86 | + console.log("authStatus:" + authStatus); | |
87 | + if (authStatus == 3) { | |
88 | + result = true; | |
89 | + console.log("相机权限已经开启"); | |
90 | + } else { | |
91 | + console.log("相机权限没有开启"); | |
92 | + } | |
93 | + plus.ios.deleteObject(AVCaptureDevice); | |
94 | + return result; | |
95 | +} | |
96 | + | |
97 | +// 判断相册权限是否开启 | |
98 | +function judgeIosPermissionPhotoLibrary() { | |
99 | + var result = false; | |
100 | + var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary"); | |
101 | + var authStatus = PHPhotoLibrary.authorizationStatus(); | |
102 | + console.log("authStatus:" + authStatus); | |
103 | + if (authStatus == 3) { | |
104 | + result = true; | |
105 | + console.log("相册权限已经开启"); | |
106 | + } else { | |
107 | + console.log("相册权限没有开启"); | |
108 | + } | |
109 | + plus.ios.deleteObject(PHPhotoLibrary); | |
110 | + return result; | |
111 | +} | |
112 | + | |
113 | +// 判断通讯录权限是否开启 | |
114 | +function judgeIosPermissionContact() { | |
115 | + var result = false; | |
116 | + var CNContactStore = plus.ios.import("CNContactStore"); | |
117 | + var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0); | |
118 | + if (cnAuthStatus == 3) { | |
119 | + result = true; | |
120 | + console.log("通讯录权限已经开启"); | |
121 | + } else { | |
122 | + console.log("通讯录权限没有开启"); | |
123 | + } | |
124 | + plus.ios.deleteObject(CNContactStore); | |
125 | + return result; | |
126 | +} | |
127 | + | |
128 | +// 判断日历权限是否开启 | |
129 | +function judgeIosPermissionCalendar() { | |
130 | + var result = false; | |
131 | + var EKEventStore = plus.ios.import("EKEventStore"); | |
132 | + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0); | |
133 | + if (ekAuthStatus == 3) { | |
134 | + result = true; | |
135 | + console.log("日历权限已经开启"); | |
136 | + } else { | |
137 | + console.log("日历权限没有开启"); | |
138 | + } | |
139 | + plus.ios.deleteObject(EKEventStore); | |
140 | + return result; | |
141 | +} | |
142 | + | |
143 | +// 判断备忘录权限是否开启 | |
144 | +function judgeIosPermissionMemo() { | |
145 | + var result = false; | |
146 | + var EKEventStore = plus.ios.import("EKEventStore"); | |
147 | + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1); | |
148 | + if (ekAuthStatus == 3) { | |
149 | + result = true; | |
150 | + console.log("备忘录权限已经开启"); | |
151 | + } else { | |
152 | + console.log("备忘录权限没有开启"); | |
153 | + } | |
154 | + plus.ios.deleteObject(EKEventStore); | |
155 | + return result; | |
156 | +} | |
157 | + | |
158 | +// Android权限查询 | |
159 | +function requestAndroidPermission(permissionID) { | |
160 | + return new Promise((resolve, reject) => { | |
161 | + plus.android.requestPermissions( | |
162 | + [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装 | |
163 | + function(resultObj) { | |
164 | + var result = 0; | |
165 | + for (var i = 0; i < resultObj.granted.length; i++) { | |
166 | + var grantedPermission = resultObj.granted[i]; | |
167 | + console.log('已获取的权限:' + grantedPermission); | |
168 | + result = 1 | |
169 | + } | |
170 | + for (var i = 0; i < resultObj.deniedPresent.length; i++) { | |
171 | + var deniedPresentPermission = resultObj.deniedPresent[i]; | |
172 | + console.log('拒绝本次申请的权限:' + deniedPresentPermission); | |
173 | + result = 0 | |
174 | + } | |
175 | + for (var i = 0; i < resultObj.deniedAlways.length; i++) { | |
176 | + var deniedAlwaysPermission = resultObj.deniedAlways[i]; | |
177 | + console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); | |
178 | + result = -1 | |
179 | + } | |
180 | + resolve(result); | |
181 | + // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限 | |
182 | + // if (result != 1) { | |
183 | + // gotoAppPermissionSetting() | |
184 | + // } | |
185 | + }, | |
186 | + function(error) { | |
187 | + console.log('申请权限错误:' + error.code + " = " + error.message); | |
188 | + resolve({ | |
189 | + code: error.code, | |
190 | + message: error.message | |
191 | + }); | |
192 | + } | |
193 | + ); | |
194 | + }); | |
195 | +} | |
196 | + | |
197 | +// 使用一个方法,根据参数判断权限 | |
198 | +function judgeIosPermission(permissionID) { | |
199 | + if (permissionID == "location") { | |
200 | + return judgeIosPermissionLocation() | |
201 | + } else if (permissionID == "camera") { | |
202 | + return judgeIosPermissionCamera() | |
203 | + } else if (permissionID == "photoLibrary") { | |
204 | + return judgeIosPermissionPhotoLibrary() | |
205 | + } else if (permissionID == "record") { | |
206 | + return judgeIosPermissionRecord() | |
207 | + } else if (permissionID == "push") { | |
208 | + return judgeIosPermissionPush() | |
209 | + } else if (permissionID == "contact") { | |
210 | + return judgeIosPermissionContact() | |
211 | + } else if (permissionID == "calendar") { | |
212 | + return judgeIosPermissionCalendar() | |
213 | + } else if (permissionID == "memo") { | |
214 | + return judgeIosPermissionMemo() | |
215 | + } | |
216 | + return false; | |
217 | +} | |
218 | + | |
219 | +// 跳转到**应用**的权限页面 | |
220 | +function gotoAppPermissionSetting() { | |
221 | + if (isIos) { | |
222 | + var UIApplication = plus.ios.import("UIApplication"); | |
223 | + var application2 = UIApplication.sharedApplication(); | |
224 | + var NSURL2 = plus.ios.import("NSURL"); | |
225 | + // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES"); | |
226 | + var setting2 = NSURL2.URLWithString("app-settings:"); | |
227 | + application2.openURL(setting2); | |
228 | + | |
229 | + plus.ios.deleteObject(setting2); | |
230 | + plus.ios.deleteObject(NSURL2); | |
231 | + plus.ios.deleteObject(application2); | |
232 | + } else { | |
233 | + // console.log(plus.device.vendor); | |
234 | + var Intent = plus.android.importClass("android.content.Intent"); | |
235 | + var Settings = plus.android.importClass("android.provider.Settings"); | |
236 | + var Uri = plus.android.importClass("android.net.Uri"); | |
237 | + var mainActivity = plus.android.runtimeMainActivity(); | |
238 | + var intent = new Intent(); | |
239 | + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); | |
240 | + var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); | |
241 | + intent.setData(uri); | |
242 | + mainActivity.startActivity(intent); | |
243 | + } | |
244 | +} | |
245 | + | |
246 | +// 检查系统的设备服务是否开启 | |
247 | +// var checkSystemEnableLocation = async function () { | |
248 | +function checkSystemEnableLocation() { | |
249 | + if (isIos) { | |
250 | + var result = false; | |
251 | + var cllocationManger = plus.ios.import("CLLocationManager"); | |
252 | + var result = cllocationManger.locationServicesEnabled(); | |
253 | + console.log("系统定位开启:" + result); | |
254 | + plus.ios.deleteObject(cllocationManger); | |
255 | + return result; | |
256 | + } else { | |
257 | + var context = plus.android.importClass("android.content.Context"); | |
258 | + var locationManager = plus.android.importClass("android.location.LocationManager"); | |
259 | + var main = plus.android.runtimeMainActivity(); | |
260 | + var mainSvr = main.getSystemService(context.LOCATION_SERVICE); | |
261 | + var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER); | |
262 | + console.log("系统定位开启:" + result); | |
263 | + return result | |
264 | + } | |
265 | +} | |
266 | + | |
267 | +module.exports = { | |
268 | + judgeIosPermission: judgeIosPermission, | |
269 | + requestAndroidPermission: requestAndroidPermission, | |
270 | + checkSystemEnableLocation: checkSystemEnableLocation, | |
271 | + gotoAppPermissionSetting: gotoAppPermissionSetting | |
272 | +} | ... | ... |