add location helper
This commit is contained in:
parent
7f9c4bc663
commit
15223b7de4
@ -1,5 +1,10 @@
|
|||||||
import { Context } from '@ohos.arkui.UIContext';
|
import { Context } from '@ohos.arkui.UIContext';
|
||||||
import { window } from '@kit.ArkUI';
|
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 {
|
export class MyApp {
|
||||||
|
|
||||||
@ -20,4 +25,19 @@ export class MyApp {
|
|||||||
MyApp.mainWindow = window;
|
MyApp.mainWindow = window;
|
||||||
MyApp.uiContext = window.getUIContext();
|
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 {
|
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
|
||||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
|
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
|
||||||
|
MyApp.initAbility(this.context);
|
||||||
|
MyApp.requestBasicPermission();
|
||||||
}
|
}
|
||||||
|
|
||||||
onDestroy(): void {
|
onDestroy(): void {
|
||||||
@ -22,7 +24,6 @@ export default class AppAbility extends UIAbility {
|
|||||||
onWindowStageCreate(windowStage: window.WindowStage): void {
|
onWindowStageCreate(windowStage: window.WindowStage): void {
|
||||||
// Main window is created, set main page for this ability
|
// Main window is created, set main page for this ability
|
||||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
|
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
|
||||||
MyApp.initAbility(this.context);
|
|
||||||
windowStage.loadContent('pages/Index', (err, data) => {
|
windowStage.loadContent('pages/Index', (err, data) => {
|
||||||
if (err.code) {
|
if (err.code) {
|
||||||
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
|
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 { geoLocationManager } from '@kit.LocationKit';
|
||||||
import { BusinessError } from '@kit.BasicServicesKit';
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
|
import { LocationHelper } from '../../utils/LocationHelper';
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Entry({routeName: 'MapPage'})
|
@Entry({routeName: 'MapPage'})
|
||||||
@ -10,32 +11,12 @@ struct MapPage {
|
|||||||
@State isLocationPermission: boolean = false;
|
@State isLocationPermission: boolean = false;
|
||||||
@State locText: string = ''
|
@State locText: string = ''
|
||||||
|
|
||||||
checkLocationPermission() {
|
locationHelper: LocationHelper = new LocationHelper(getContext(this) as common.UIAbilityContext);
|
||||||
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() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
locationViewBuilder() {
|
locationViewBuilder() {
|
||||||
Row() {
|
Row() {
|
||||||
Text('开启定位权限,为您推荐附近商家与好物 ').fontSize(15);
|
Text('开启定位权限').fontSize(15);
|
||||||
Button('去开启')
|
Button('去开启')
|
||||||
.type(ButtonType.Normal)
|
.type(ButtonType.Normal)
|
||||||
.height(24)
|
.height(24)
|
||||||
@ -44,7 +25,6 @@ struct MapPage {
|
|||||||
.backgroundColor(Color.Red)
|
.backgroundColor(Color.Red)
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
if (this.isLocationPermission) {
|
if (this.isLocationPermission) {
|
||||||
this.checkLocationPermission()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -73,23 +53,8 @@ struct MapPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
aboutToAppear(): void {
|
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