guoshilong
2023-10-27 2311b03aee9db1bebacdd2ced13c071efda6a011
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
export default {
    //检测是否开启系统定位权限
    hasLocationPermission() {
        let system = uni.getSystemInfoSync();
        if (system.platform === 'android') { //安卓
            let context = plus.android.importClass("android.content.Context");
            let locationManager = plus.android.importClass("android.location.LocationManager");
            let main = plus.android.runtimeMainActivity();
            let service = main.getSystemService(context.LOCATION_SERVICE);
            //已开启系统定位服务功能
            if (service.isProviderEnabled(locationManager.GPS_PROVIDER)) {
                // uni.showModal({
                //     content: "定位功能已开启,请勿离开应用或熄屏",
                //     showCancel: false
                // })
                return true;
            } else { //未开启引导开启
                uni.showModal({
                    title: '友情提示',
                    content: '请开启位置服务功能',
                    success: e => {
                        if (e.confirm) {
                            //打开手机系统gps定位设置页面
                            let Intent = plus.android.importClass('android.content.Intent');
                            let Settings = plus.android.importClass('android.provider.Settings');
                            let intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                            main.startActivity(intent);
                        }
                    }
                })
            }
        } else if (system.platform === 'ios') { //ios
            let cllocationManger = plus.ios.import("CLLocationManager");
            let enable = cllocationManger.locationServicesEnabled();
            let status = cllocationManger.authorizationStatus();
            plus.ios.deleteObject(cllocationManger);
            if (enable && status != 2) return true; //已开启定位功能
            else {
                uni.showModal({
                    title: '友情提示',
                    content: '请前往设置-定位服务打开定位服务功能',
                    success: e => {
                        if (e.confirm) {
                            let UIApplication = plus.ios.import("UIApplication");
                            let application = UIApplication.sharedApplication();
                            let NSURL = plus.ios.import("NSURL");
                            let setting = NSURL.URLWithString("app-settings:");
                            application.openURL(setting);
                            plus.ios.deleteObject(setting);
                            plus.ios.deleteObject(NSURL);
                            plus.ios.deleteObject(application);
                        }
                    }
                });
            }
        }
        return false;
    },
    /**开启后台持续获取定位功能
     * successCallBack:成功回调函数
     *failCallBack:失败回调函数 
     *maximumAge:获取定位间隔时间
     */
    startLocationService(successCallBack = () => {}, failCallBack = () => {}, maximumAge = 60 * 1000) {
        if (this.hasLocationPermission()) { //有定位权限
            let locationWatcherId = plus.geolocation.watchPosition((position) => {
                successCallBack({
                    locationWatcherId,
                    position: position.coords
                })
            }, function(e) {
                console.log(e, '定位失败');
                failCallBack(e)
            }, {
                maximumAge, //获取位置间隔时间
            });
 
        }
 
 
    },
    //关闭定位功能
    closeLocationService(locationWatcherId) { //locationWatcherId:开启步骤生成的监听器id
        plus.geolocation.clearWatch(locationWatcherId)
    },
}