index.uts 3.7 KB
Newer Older
杜庆泉's avatar
杜庆泉 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
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";
杜庆泉's avatar
杜庆泉 已提交
14 15
import TencentLocationRequest from "com.tencent.map.geolocation.TencentLocationRequest";

杜庆泉's avatar
杜庆泉 已提交
16 17 18 19

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


杜庆泉's avatar
杜庆泉 已提交
42 43 44
/**
 * 定位请求参数封装
 */
杜庆泉's avatar
杜庆泉 已提交
45
type LocationOptions = {
杜庆泉's avatar
杜庆泉 已提交
46 47
	geocode:boolean,
	success: (response:LocationResponse) => void;
杜庆泉's avatar
杜庆泉 已提交
48 49
};

杜庆泉's avatar
杜庆泉 已提交
50 51 52 53 54 55 56 57 58 59
/**
 * 定位返回结果封装
 */
type LocationResponse = {
	name?:string,
	address?:string,
	latitude?:number,
	longitude?:number
}

杜庆泉's avatar
杜庆泉 已提交
60 61 62 63 64 65 66 67 68 69 70
class LocationOptionsWapper{
	
	hostOption:LocationOptions;
	
	constructor(option: LocationOptions){
		this.hostOption = option
	}
	
	onLocationChanged(location:TencentLocation , error:Int ,
								  reason:string){
		
杜庆泉's avatar
杜庆泉 已提交
71 72 73 74 75 76
		let response = new LocationResponse();
		response.name = location.name;
		response.address = location.address;
		response.latitude = location.latitude;
		response.longitude = location.longitude;
		this.hostOption.success(response);
杜庆泉's avatar
杜庆泉 已提交
77 78 79 80
	}
	
	
	onStatusUpdate(name:string, status:Int, desc:string){
杜庆泉's avatar
杜庆泉 已提交
81
		// 定位状态发生变化
杜庆泉's avatar
杜庆泉 已提交
82 83 84 85 86
		//hostOption.onStatusUpdate(name,status,desc);
	}
};


杜庆泉's avatar
杜庆泉 已提交
87 88 89
/**
 * Tencent 定位监听实现类
 */
杜庆泉's avatar
杜庆泉 已提交
90 91
class SingleLocationListener extends TencentLocationListener {
    
杜庆泉's avatar
杜庆泉 已提交
92
	
杜庆泉's avatar
杜庆泉 已提交
93 94 95
	hostOptionWraper:LocationOptionsWapper;
	
	constructor(option: LocationOptionsWapper){
杜庆泉's avatar
杜庆泉 已提交
96
		super();
杜庆泉's avatar
杜庆泉 已提交
97
		this.hostOptionWraper = option
杜庆泉's avatar
杜庆泉 已提交
98 99
	}
	
杜庆泉's avatar
杜庆泉 已提交
100
	override onLocationChanged(location:TencentLocation , error:Int ,
杜庆泉's avatar
杜庆泉 已提交
101
								  reason:string ):void{
102 103
									  console.log(error);
									  console.log(reason);
杜庆泉's avatar
杜庆泉 已提交
104
		console.log(location);
杜庆泉's avatar
杜庆泉 已提交
105
		this.hostOptionWraper.onLocationChanged(location,error,reason);
杜庆泉's avatar
杜庆泉 已提交
106 107
	}

杜庆泉's avatar
杜庆泉 已提交
108
	override onStatusUpdate(name:string, status:Int, desc:string ):void{
杜庆泉's avatar
杜庆泉 已提交
109
		console.log(name);
杜庆泉's avatar
杜庆泉 已提交
110
		this.hostOptionWraper.onStatusUpdate(name,status,desc);
杜庆泉's avatar
杜庆泉 已提交
111
	}
杜庆泉's avatar
杜庆泉 已提交
112
	
杜庆泉's avatar
杜庆泉 已提交
113 114
}

杜庆泉's avatar
杜庆泉 已提交
115 116 117 118 119
/**
 * 腾讯地图获取定位信息
 * 参考文档:https://lbs.qq.com/mobile/androidLocationSDK/androidGeoGuide/androidGeoAdapt
 */
export function getLocation(locationOptions: LocationOptions) {
杜庆泉's avatar
杜庆泉 已提交
120 121
	
  let mLocationManager = TencentLocationManager.getInstance(getAppContext());
杜庆泉's avatar
杜庆泉 已提交
122 123
  // 定位监听器封装
  let locationOptionWrapper = new LocationOptionsWapper(locationOptions);
杜庆泉's avatar
杜庆泉 已提交
124
  let mLocationListener = new SingleLocationListener(locationOptionWrapper);
杜庆泉's avatar
杜庆泉 已提交
125 126 127 128 129 130 131 132
  // 发起单次请求
  let locationRequest = TencentLocationRequest.create()
  // 是否需要逆地理编码
  if(locationOptions.geocode){
	  locationRequest.setRequestLevel(TencentLocationRequest.REQUEST_LEVEL_ADMIN_AREA);
  }else{
	  locationRequest.setRequestLevel(TencentLocationRequest.REQUEST_LEVEL_GEO);
  }
杜庆泉's avatar
杜庆泉 已提交
133 134
console.log(locationRequest);
  mLocationManager.requestSingleFreshLocation(null, mLocationListener, Looper.getMainLooper());
杜庆泉's avatar
杜庆泉 已提交
135 136
  return { name: "getLocation"};
}