index.uts 2.8 KB
Newer Older
杜庆泉's avatar
杜庆泉 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import {
	onAppActivityPause,
    onAppActivityRequestPermissionsResult,
	getUniActivity,
	getAppContext
} from "io.dcloud.uts.android";

import ActivityCompat from "androidx.core.app.ActivityCompat";
import Manifest from "android.Manifest";
import Looper from "android.os.Looper";
import TencentLocationManager from "com.tencent.map.geolocation.TencentLocationManager";
import TencentLocationListener from "com.tencent.map.geolocation.TencentLocationListener";
import TencentLocation from "com.tencent.map.geolocation.TencentLocation";

export function requestPremission() {
	
	// 注册一个请求回调
杜庆泉's avatar
杜庆泉 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30
	onAppActivityRequestPermissionsResult((requestCode: number,
                                                     permissions: MutableList<string>,
                                                     grantResults: MutableList<number>) => {
		/**
		 * 0 已同意
		 * -1 已拒绝
		 */
		console.log(grantResults);
		console.log(permissions);
		console.log(requestCode);
	});
	// 发起权限申请
	// 参考文档:https://lbs.qq.com/mobile/androidLocationSDK/androidGeoGuide/androidGeoAdapt
杜庆泉's avatar
杜庆泉 已提交
31 32
	ActivityCompat.requestPermissions(
	            getUniActivity()!,
杜庆泉's avatar
杜庆泉 已提交
33
	            arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION), 1001);
杜庆泉's avatar
杜庆泉 已提交
34 35 36 37 38 39
	
  // 请求权限
  return { name: "requestPremission"};
}


杜庆泉's avatar
杜庆泉 已提交
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

type LocationOptions = {
	onLocationChanged: (locationName:string,locationAddress:string ) => void;
};

class LocationOptionsWapper{
	
	hostOption:LocationOptions;
	
	constructor(option: LocationOptions){
		this.hostOption = option
	}
	
	onLocationChanged(location:TencentLocation , error:Int ,
								  reason:string){
		
		hostOption.onLocationChanged(location.name,location.address);
	}
	
	
	onStatusUpdate(name:string, status:Int, desc:string){
		//hostOption.onStatusUpdate(name,status,desc);
	}
};


杜庆泉's avatar
杜庆泉 已提交
66 67
class SingleLocationListener extends TencentLocationListener {
    
杜庆泉's avatar
杜庆泉 已提交
68
	
杜庆泉's avatar
杜庆泉 已提交
69 70 71
	hostOptionWraper:LocationOptionsWapper;
	
	constructor(option: LocationOptionsWapper){
杜庆泉's avatar
杜庆泉 已提交
72
		super();
杜庆泉's avatar
杜庆泉 已提交
73
		this.hostOptionWraper = option
杜庆泉's avatar
杜庆泉 已提交
74 75
	}
	
杜庆泉's avatar
杜庆泉 已提交
76
	override onLocationChanged(location:TencentLocation , error:Int ,
杜庆泉's avatar
杜庆泉 已提交
77 78
								  reason:string ):void{
		
杜庆泉's avatar
杜庆泉 已提交
79
		this.hostOptionWraper.onLocationChanged(location,error,reason);
杜庆泉's avatar
杜庆泉 已提交
80 81
	}

杜庆泉's avatar
杜庆泉 已提交
82
	override onStatusUpdate(name:string, status:Int, desc:string ):void{
杜庆泉's avatar
杜庆泉 已提交
83
		this.hostOptionWraper.onStatusUpdate(name,status,desc);
杜庆泉's avatar
杜庆泉 已提交
84
	}
杜庆泉's avatar
杜庆泉 已提交
85
	
杜庆泉's avatar
杜庆泉 已提交
86 87
}

杜庆泉's avatar
杜庆泉 已提交
88
export function getLocation(changeListener: LocationOptions) {
杜庆泉's avatar
杜庆泉 已提交
89 90 91
	
  // 获取当前的地址回调
  let mLocationManager = TencentLocationManager.getInstance(getAppContext());
杜庆泉's avatar
杜庆泉 已提交
92 93 94
  let locationOptionWrapper = new LocationOptionsWapper(changeListener);
  let mLocationListener = new SingleLocationListener(locationOptionWrapper);
  
杜庆泉's avatar
杜庆泉 已提交
95 96 97 98
  mLocationManager.requestSingleFreshLocation(null, mLocationListener, Looper.getMainLooper());
  // 请求权限
  return { name: "getLocation"};
}