美文网首页Weex
weex☞获取经纬度

weex☞获取经纬度

作者: 小学生的博客 | 来源:发表于2018-12-07 18:10 被阅读48次

    获取通讯录、扫码、打开相册、拍照等操作,都是一个套路,就是创建module,原生实现这些方法,前端调用是时候返回最终的结果。
    下面是如何获取经纬度坐标。(原生获取部分参考网上代码,有价值的只是返回数据)

    public class GetLocation extends WXModule {
        protected JSCallback callback;
    
        private LocationManager locationManager;
        private String locationProvider;
        public final static int LOCAL_REQUEST_CODE = 0;
    
        @JSMethod(uiThread = true)
        public void getLocal(JSCallback callback) {
            this.callback = callback;
            locationManager = (LocationManager) mWXSDKInstance.getContext().getSystemService(mWXSDKInstance.getContext().LOCATION_SERVICE);
            //下面注释的代码获取的location为null,所以采用Criteria的方式。
    
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_COARSE);//低精度,如果设置为高精度,依然获取不了location。
            criteria.setAltitudeRequired(false);//不要求海拔
            criteria.setBearingRequired(false);//不要求方位
            criteria.setCostAllowed(true);//允许有花费
            criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
    
            //从可用的位置提供器中,匹配以上标准的最佳提供器
            locationProvider = locationManager.getBestProvider(criteria, true);
            if (ActivityCompat.checkSelfPermission(mWXSDKInstance.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mWXSDKInstance.getContext(),
                    Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                Log.d("tag-local", " 没有权限 就获取权限");
                ActivityCompat.requestPermissions((WXPageActivity) mWXSDKInstance.getContext(),
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        LOCAL_REQUEST_CODE);
            }
            Location location = locationManager.getLastKnownLocation(locationProvider);
            if (location != null) {
                //不为空,显示地理位置经纬度
                showLocation(callback, location);
            }
            //监视地理位置变化
            locationManager.requestLocationUpdates(locationProvider, 0, 0, locationListener);
        }
    
        @JSMethod(uiThread = false)
        public void removeLocalListener(JSCallback callback) {
            locationManager.removeUpdates(locationListener);
            callback.invoke("success");
        }
    
        /**
         * LocationListern监听器
         * 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器
         */
        LocationListener locationListener = new LocationListener() {
            @Override
            public void onStatusChanged(String provider, int status, Bundle arg2) {
            }
            @Override
            public void onProviderEnabled(String provider) {
                Log.d("tag-local", "onProviderEnabled: " + provider + ".." + Thread.currentThread().getName());
            }
            @Override
            public void onProviderDisabled(String provider) {
                Log.d("tag-local", "onProviderDisabled: " + provider + ".." + Thread.currentThread().getName());
            }
            @Override
            public void onLocationChanged(Location location) {
                Log.d("tag-local", "onLocationChanged: " + ".." + Thread.currentThread().getName());
                //如果位置发生变化,重新显示
                showLocation(callback, location);
            }
        };
        private void showLocation(JSCallback callback, Location location) {
            Log.d("tag-local", "定位成功------>经度为:" + location.getLatitude() + "\n纬度为" + location.getLongitude());
            Map data2 = new HashMap();
            data2.put("result", true);
            data2.put("Latitude", location.getLatitude());
            data2.put("Longitude", location.getLongitude());
            callback.invoke(data2);
        }
    }
    

    配置相应的权限,在WXApplication中加入

       WXSDKEngine.registerModule("getLocation", GetLocation.class);
    

    然后就是前端调用

    const getLocation= weex.requireModule('getLocation')
    ...         //在方法中直接使用就行了
                getLocation.getLocal(res => {
                       ...
                    })
               //获取到数据后可以取消监听
               getLocation.removeLocalListener(res => {
                       ...
                    })
    

    相关文章

      网友评论

        本文标题:weex☞获取经纬度

        本文链接:https://www.haomeiwen.com/subject/jclxhqtx.html