diff --git a/app/src/main/ets/MyApp.ets b/app/src/main/ets/MyApp.ets index 573ff66..56cee11 100644 --- a/app/src/main/ets/MyApp.ets +++ b/app/src/main/ets/MyApp.ets @@ -1,5 +1,10 @@ import { Context } from '@ohos.arkui.UIContext'; import { window } from '@kit.ArkUI'; +import { abilityAccessCtrl } from '@kit.AbilityKit'; +import { Log } from '@devwiki/base'; +import { BusinessError } from '@kit.BasicServicesKit'; + +const TAG = '[MyApp]' export class MyApp { @@ -20,4 +25,19 @@ export class MyApp { MyApp.mainWindow = window; MyApp.uiContext = window.getUIContext(); } + + static requestBasicPermission() { + let atManager = abilityAccessCtrl.createAtManager(); + try { + atManager.requestPermissionsFromUser(MyApp.uiAbilityContext, + ['ohos.permission.INTERNET']) + .then((data) => { + Log.i(TAG, 'requestBasicPermission, data:' + data.permissions[0]) + }) + .catch((err: BusinessError) => { + Log.i(TAG, 'requestBasicPermission, error:' + err.message) + }) + } catch (err) { + } + } } \ No newline at end of file diff --git a/app/src/main/ets/appability/AppAbility.ets b/app/src/main/ets/appability/AppAbility.ets index 0b8c0b0..49b7fcb 100644 --- a/app/src/main/ets/appability/AppAbility.ets +++ b/app/src/main/ets/appability/AppAbility.ets @@ -13,6 +13,8 @@ export default class AppAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + MyApp.initAbility(this.context); + MyApp.requestBasicPermission(); } onDestroy(): void { @@ -22,7 +24,6 @@ export default class AppAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page for this ability hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); - MyApp.initAbility(this.context); windowStage.loadContent('pages/Index', (err, data) => { if (err.code) { hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); diff --git a/app/src/main/ets/pages/map/MapPage.ets b/app/src/main/ets/pages/map/MapPage.ets index 7d6c66f..7487384 100644 --- a/app/src/main/ets/pages/map/MapPage.ets +++ b/app/src/main/ets/pages/map/MapPage.ets @@ -1,6 +1,7 @@ -import { abilityAccessCtrl, bundleManager, common, PermissionRequestResult } from '@kit.AbilityKit'; +import { abilityAccessCtrl, bundleManager, common, PermissionRequestResult, Permissions } from '@kit.AbilityKit'; import { geoLocationManager } from '@kit.LocationKit'; import { BusinessError } from '@kit.BasicServicesKit'; +import { LocationHelper } from '../../utils/LocationHelper'; @Component @Entry({routeName: 'MapPage'}) @@ -10,32 +11,12 @@ struct MapPage { @State isLocationPermission: boolean = false; @State locText: string = '' - checkLocationPermission() { - let manager = abilityAccessCtrl.createAtManager() // 得到manager对象 - let appInfo = - bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION) // 获取应用信息 - this.appName = appInfo.name; - let context: Context = getContext(this) as common.UIAbilityContext; - let permission:string = 'ohos.permission.LOCATION' - let status = manager.checkAccessTokenSync(appInfo.appInfo.accessTokenId, "ohos.permission.LOCATION") - if (status === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) { - this.isShowLocationPopup = true; - manager.requestPermissionsFromUser(context, ['ohos.permission.LOCATION'], (err: BusinessError, data: PermissionRequestResult) => { - - }); - } else { - this.getLocationAddress(); - } - } - - requestionLocationPermission() { - - } + locationHelper: LocationHelper = new LocationHelper(getContext(this) as common.UIAbilityContext); @Builder locationViewBuilder() { Row() { - Text('开启定位权限,为您推荐附近商家与好物 ').fontSize(15); + Text('开启定位权限').fontSize(15); Button('去开启') .type(ButtonType.Normal) .height(24) @@ -44,7 +25,6 @@ struct MapPage { .backgroundColor(Color.Red) .onClick(() => { if (this.isLocationPermission) { - this.checkLocationPermission() } }) @@ -73,23 +53,8 @@ struct MapPage { } aboutToAppear(): void { - this.checkLocationPermission() - } + this.locationHelper.requestPermissionsFromUser((allowScope: boolean, allowPrecision: boolean) => { - getLocationAddress() { - let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1}; - try { - geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => { - if (err) { - console.error('getAddressesFromLocation: err=' + JSON.stringify(err)); - } - if (data) { - console.log('getAddressesFromLocation: data=' + JSON.stringify(data)); - this.locText = data[0].placeName ?? ''; - } - }); - } catch (err) { - console.error("errCode:" + JSON.stringify(err)); - } + }) } } \ No newline at end of file diff --git a/app/src/main/ets/utils/LocationHelper.ets b/app/src/main/ets/utils/LocationHelper.ets new file mode 100644 index 0000000..ae99ee5 --- /dev/null +++ b/app/src/main/ets/utils/LocationHelper.ets @@ -0,0 +1,54 @@ +import { abilityAccessCtrl, bundleManager, common, PermissionRequestResult, Permissions } from '@kit.AbilityKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { geoLocationManager } from '@kit.LocationKit'; + +const locationPermission: Permissions[] = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION']; + +export class LocationHelper { + + appInfo: bundleManager.BundleInfo; + context: common.UIAbilityContext; + atManager: abilityAccessCtrl.AtManager; + + constructor(context: common.UIAbilityContext) { + this.context = context; + this.atManager = abilityAccessCtrl.createAtManager(); + this.appInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION) // 获取应用信息 + } + + checkLocationPermission(callback: (isAllow: boolean) => void) { + let status = this.atManager.checkAccessTokenSync(this.appInfo.appInfo.accessTokenId, locationPermission[0]) + callback(status === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) + } + + gotoSystemSetting() { + + } + + + /** + * 请求定位 allowScope是否允许定位, allowPrecision: 是否允许获取精确位置 + * @param callback + */ + requestPermissionsFromUser(callback: (allowScope: boolean, allowPrecision: boolean) => void): void { + this.atManager.requestPermissionsFromUser(this.context, locationPermission) + .then((data: PermissionRequestResult) => { + callback(data.authResults[1] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED, + data.authResults[0] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED); + }) + .catch((err: BusinessError) => { + console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); + }) + } + + getLocationAddress(latitude: number, longitude: number, maxItems: number, callback:(error: BusinessError, data: geoLocationManager.GeoAddress[]) => void) { + let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude": latitude, "longitude": longitude, "maxItems": maxItems}; + try { + geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => { + callback(err, data); + }); + } catch (err) { + console.error("errCode:" + JSON.stringify(err)); + } + } +} \ No newline at end of file