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() { // 注册一个请求回调 onAppActivityRequestPermissionsResult((requestCode: number, permissions: MutableList, grantResults: MutableList) => { /** * 0 已同意 * -1 已拒绝 */ console.log(grantResults); console.log(permissions); console.log(requestCode); }); // 发起权限申请 // 参考文档:https://lbs.qq.com/mobile/androidLocationSDK/androidGeoGuide/androidGeoAdapt ActivityCompat.requestPermissions( getUniActivity()!, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION), 1001); // 请求权限 return { name: "requestPremission"}; } 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); } }; class SingleLocationListener extends TencentLocationListener { hostOptionWraper:LocationOptionsWapper; constructor(option: LocationOptionsWapper){ super(); this.hostOptionWraper = option } override onLocationChanged(location:TencentLocation , error:Int , reason:string ):void{ this.hostOptionWraper.onLocationChanged(location,error,reason); } override onStatusUpdate(name:string, status:Int, desc:string ):void{ this.hostOptionWraper.onStatusUpdate(name,status,desc); } } export function getLocation(changeListener: LocationOptions) { // 获取当前的地址回调 let mLocationManager = TencentLocationManager.getInstance(getAppContext()); let locationOptionWrapper = new LocationOptionsWapper(changeListener); let mLocationListener = new SingleLocationListener(locationOptionWrapper); mLocationManager.requestSingleFreshLocation(null, mLocationListener, Looper.getMainLooper()); // 请求权限 return { name: "getLocation"}; }