1# 程序访问子系统变更说明
2## cl.access_token.1 requestPermissionsFromUser申请位置权限时行为变更
3
4**访问级别**
5
6公开接口
7
8**变更原因**
9
10该变更为非兼容性变更。根据安全隐私要求,位置权限申请使用时,申请精确/后台位置权限,要同时申请模糊权限。
11
12**变更影响**
13
14变更前,通过调用[requestPermissionsFromUser](../../../application-dev/reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)接口申请位置权限,如下两种申请情况都可以顺利拉起弹窗:
15
161、在未申请模糊权限[ohos.permission.APPROXIMATELY_LOCATION](../../../application-dev/security/permission-list.md#ohospermissionapproximately_location)的情况下,请求后台位置权限[ohos.permission.LOCATION_IN_BACKGROUND](../../../application-dev/security/permission-list.md#ohospermissionlocation_in_background)
17
182、在未申请模糊权限[ohos.permission.APPROXIMATELY_LOCATION](../../../application-dev/security/permission-list.md#ohospermissionapproximately_location)的情况下,同时请求后台位置权限[ohos.permission.LOCATION_IN_BACKGROUND](../../../application-dev/security/permission-list.md#ohospermissionlocation_in_background)及精准权限[ohos.permission.LOCATION](../../../application-dev/security/permission-list.md#ohospermissionlocation);
19
20变更后,上述两种情况将无法拉起弹窗授予权限。应用在申请精准权限或后台权限时,必须同时申请模糊权限。
21
22**变更发生版本**
23
24从OpenHarmony SDK 4.1.1.5开始。
25
26**变更的接口/组件**
27
28@ohos.abilityAccessCtrl.d.ts中requestPermissionsFromUser接口,使用该接口申请位置权限的应用,在申请精准权限或后台权限时,必须同时申请模糊权限。
29
30**可能影响接口**
31
32| 文件 | 方法 |
33| -------- | -------- |
34| @ohos.geolocation.d.ts | geolocation.on('locationChange') |
35| @ohos.geolocation.d.ts | geolocation.off('locationChange') |
36| @ohos.geolocation.d.ts | geolocation.on('locationServiceState') |
37| @ohos.geolocation.d.ts | geolocation.off('locationServiceState') |
38| @ohos.geolocation.d.ts | geolocation.on('cachedGnssLocationsReporting') |
39| @ohos.geolocation.d.ts | geolocation.off('cachedGnssLocationsReporting') |
40| @ohos.geolocation.d.ts | geolocation.on('gnssStatusChange') |
41| @ohos.geolocation.d.ts | geolocation.off('gnssStatusChange') |
42| @ohos.geolocation.d.ts | geolocation.on('nmeaMessageChange') |
43| @ohos.geolocation.d.ts | geolocation.off('nmeaMessageChange') |
44| @ohos.geolocation.d.ts | geolocation.on('fenceStatusChange') |
45| @ohos.geolocation.d.ts | geolocation.off('fenceStatusChange') |
46| @ohos.geolocation.d.ts | geolocation.getCurrentLocation |
47| @ohos.geolocation.d.ts | geolocation.getLastLocation |
48| @ohos.geolocation.d.ts | geolocation.isLocationEnabled |
49| @ohos.geolocation.d.ts | geolocation.requestEnableLocation |
50| @ohos.geolocation.d.ts | geolocation.isGeoServiceAvailable |
51| @ohos.geolocation.d.ts | geolocation.getAddressesFromLocation |
52| @ohos.geolocation.d.ts | geolocation.getAddressesFromLocationName |
53| @ohos.geolocation.d.ts | geolocation.getCachedGnssLocationsSize |
54| @ohos.geolocation.d.ts | geolocation.flushCachedGnssLocations |
55| @ohos.geolocation.d.ts | geolocation.sendCommand |
56| @ohos.geolocation.d.ts | SatelliteStatusInfo |
57| @ohos.geolocation.d.ts | CachedGnssLocationsRequest |
58| @ohos.geolocation.d.ts | GeofenceRequest |
59| @ohos.geolocation.d.ts | Geofence |
60| @ohos.geolocation.d.ts | ReverseGeoCodeRequest |
61| @ohos.geolocation.d.ts | GeoCodeRequest |
62| @ohos.geolocation.d.ts | GeoAddress |
63| @ohos.geolocation.d.ts | LocationRequest |
64| @ohos.geolocation.d.ts | CurrentLocationRequest |
65| @ohos.geolocation.d.ts | Location |
66| @ohos.geoLocationManager.d.ts | geoLocationManager.on('nmeaMessage') |
67| @ohos.geoLocationManager.d.ts | geoLocationManager.off('nmeaMessage') |
68| @ohos.geoLocationManager.d.ts | geoLocationManager.on('locatingRequiredDataChange') |
69| @ohos.geoLocationManager.d.ts | geoLocationManager.off('locatingRequiredDataChange') |
70| @ohos.geoLocationManager.d.ts | geoLocationManager.getLocatingRequiredData |
71| @ohos.bluetooth.d.ts | bluetooth.startBluetoothDiscovery |
72| @ohos.bluetooth.d.ts | startBLEScan |
73| @ohos.bluetoothManager.d.ts | bluetoothManager.startBluetoothDiscovery |
74| @ohos.bluetoothManager.d.ts | startBLEScan |
75| @ohos.telephony.observer.d.ts | observer.on('cellInfoChange') |
76| @ohos.telephony.radio.d.ts | radio.sendUpdateCellLocationRequest |
77| @ohos.telephony.radio.d.ts | radio.getCellInformation |
78| @system.geolocation.d.ts | GetLocationOption |
79| @system.geolocation.d.ts | SubscribeLocationOption |
80| @system.geolocation.d.ts | geolocation.getLocation |
81| @system.geolocation.d.ts | geolocation.subscribe |
82| @system.geolocation.d.ts | geolocation.unsubscribe |
83| @ohos.wifi.d.ts | wifi.scan |
84| @ohos.wifi.d.ts | wifi.getScanInfos |
85| @ohos.wifi.d.ts | wifi.getDeviceConfigs |
86| @ohos.wifi.d.ts | wifi.getStations |
87| @ohos.wifi.d.ts | wifi.getCurrentGroup |
88| @ohos.wifi.d.ts | wifi.getP2pPeerDevices |
89| @ohos.wifi.d.ts | wifi.p2pConnect |
90| @ohos.wifi.d.ts | wifi.startDiscoverDevices |
91| @ohos.wifi.d.ts | wifi.on('p2pDeviceChange') |
92| @ohos.wifi.d.ts | wifi.off('p2pDeviceChange') |
93| @ohos.wifi.d.ts | wifi.on('p2pPeerDeviceChange') |
94| @ohos.wifi.d.ts | wifi.off('p2pPeerDeviceChange') |
95| @ohos.wifiManager.d.ts | wifiManager.scan |
96| @ohos.wifiManager.d.ts | wifiManager.getScanResults |
97| @ohos.wifiManager.d.ts | wifiManager.getScanResultsSync |
98| @ohos.wifiManager.d.ts | wifiManager.getCandidateConfigs |
99| @ohos.wifiManager.d.ts | wifiManager.getDeviceConfigs |
100| @ohos.wifiManager.d.ts | wifiManager.getStations |
101| @ohos.wifiManager.d.ts | wifiManager.getCurrentGroup |
102| @ohos.wifiManager.d.ts | wifiManager.getP2pPeerDevices |
103| @ohos.wifiManager.d.ts | wifiManager.p2pConnect |
104| @ohos.wifiManager.d.ts | wifiManager.startDiscoverDevices |
105| @ohos.wifiManager.d.ts | wifiManager.getP2pGroups |
106| @ohos.wifiManager.d.ts | wifiManager.on('p2pDeviceChange') |
107| @ohos.wifiManager.d.ts | wifiManager.off('p2pDeviceChange') |
108| @ohos.wifiManager.d.ts | wifiManager.on('p2pPeerDeviceChange') |
109| @ohos.wifiManager.d.ts | wifiManager.off('p2pPeerDeviceChange') |
110
111**适配指导**
112
113修改EntryAbility.ets和导入GlobalThis等步骤参考[requestPermissionsFromUser](../../../application-dev/reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)
114
115```ts
116    let context: common.UIAbilityContext = GlobalThis.getInstance().getContext('context');
117    atManager.requestPermissionsFromUser(context, ['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION', 'ohos.permission.LOCATION_IN_BACKGROUND']).then((data) => {
118        console.info('data:' + JSON.stringify(data));
119    }).catch((err: BusinessError) => {
120        console.info('data:' + JSON.stringify(err));
121    })
122```
123