add location helper
This commit is contained in:
parent
7f9c4bc663
commit
15223b7de4
@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
@ -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) ?? '');
|
||||
|
@ -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));
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
54
app/src/main/ets/utils/LocationHelper.ets
Normal file
54
app/src/main/ets/utils/LocationHelper.ets
Normal file
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user