|  | 
| 7 | 7 | import com.amap.api.location.AMapLocationListener; | 
| 8 | 8 | import com.facebook.react.bridge.Arguments; | 
| 9 | 9 | import com.facebook.react.bridge.LifecycleEventListener; | 
|  | 10 | +import com.facebook.react.bridge.Promise; | 
| 10 | 11 | import com.facebook.react.bridge.ReactApplicationContext; | 
| 11 | 12 | import com.facebook.react.bridge.ReactContextBaseJavaModule; | 
| 12 | 13 | import com.facebook.react.bridge.ReactMethod; | 
|  | 
| 21 | 22 | 
 | 
| 22 | 23 | 
 | 
| 23 | 24 | public class AMapLocationReactModule extends ReactContextBaseJavaModule implements AMapLocationListener, LifecycleEventListener { | 
| 24 |  | -    private static final String MODULE_NAME = "EleRNLocation"; | 
|  | 25 | +    private static final String MODULE_NAME = "RNGeolocation"; | 
| 25 | 26 |     private AMapLocationClient mLocationClient; | 
| 26 | 27 |     private AMapLocationListener mLocationListener = this; | 
| 27 | 28 |     private final ReactApplicationContext mReactContext; | 
| @@ -189,6 +190,101 @@ private WritableMap amapLocationToObject(AMapLocation amapLocation) { | 
| 189 | 190 |         return map; | 
| 190 | 191 |     } | 
| 191 | 192 | 
 | 
|  | 193 | +    @ReactMethod | 
|  | 194 | +    public void getLocation(@Nullable ReadableMap options, final Promise promise) { | 
|  | 195 | +        AMapLocationClient mLocationClient = new AMapLocationClient(mReactContext); | 
|  | 196 | +        mLocationClient.setLocationListener(new AMapLocationListener() { | 
|  | 197 | +            @Override | 
|  | 198 | +            public void onLocationChanged(AMapLocation amapLocation) { | 
|  | 199 | +                if (amapLocation != null) { | 
|  | 200 | +                    promise.resolve(amapLocationToObject(amapLocation)); | 
|  | 201 | +                } else { | 
|  | 202 | +                    promise.reject("-1", "null"); | 
|  | 203 | +                } | 
|  | 204 | +            } | 
|  | 205 | +        }); | 
|  | 206 | +        mReactContext.addLifecycleEventListener(this); | 
|  | 207 | +        AMapLocationClientOption mLocationOption = makeClientOption(options, true); | 
|  | 208 | +        mLocationClient.setLocationOption(mLocationOption); | 
|  | 209 | +        mLocationClient.startLocation(); | 
|  | 210 | + | 
|  | 211 | +    } | 
|  | 212 | + | 
|  | 213 | +    AMapLocationClientOption makeClientOption(@Nullable ReadableMap options, boolean onceLocation) { | 
|  | 214 | +        AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); | 
|  | 215 | +        mLocationOption.setOnceLocation(onceLocation); | 
|  | 216 | +        needDetail = true; | 
|  | 217 | +        if (options != null) { | 
|  | 218 | +            // if (options.hasKey("needDetail")) { | 
|  | 219 | +            //     needDetail = options.getBoolean("needDetail"); | 
|  | 220 | +            // } | 
|  | 221 | +            if (options.hasKey("accuracy")) { | 
|  | 222 | +                //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 | 
|  | 223 | +                switch (options.getString("accuracy")) { | 
|  | 224 | +                    case "BatterySaving": | 
|  | 225 | +                        mLocationOption.setLocationMode(AMapLocationMode.Battery_Saving); | 
|  | 226 | +                        break; | 
|  | 227 | +                    case "DeviceSensors": | 
|  | 228 | +                        mLocationOption.setLocationMode(AMapLocationMode.Device_Sensors); | 
|  | 229 | +                        break; | 
|  | 230 | +                    case "HighAccuracy": | 
|  | 231 | +                        mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); | 
|  | 232 | +                        break; | 
|  | 233 | +                    default: | 
|  | 234 | +                        break; | 
|  | 235 | +                } | 
|  | 236 | +            } | 
|  | 237 | +            if (options.hasKey("needAddress")) { | 
|  | 238 | +                //设置是否返回地址信息(默认返回地址信息) | 
|  | 239 | +                mLocationOption.setNeedAddress(options.getBoolean("needAddress")); | 
|  | 240 | +            } | 
|  | 241 | +            if (options.hasKey("onceLocation")) { | 
|  | 242 | +                //设置是否只定位一次,默认为false | 
|  | 243 | +//                mLocationOption.setOnceLocation(options.getBoolean("onceLocation")); | 
|  | 244 | +            } | 
|  | 245 | +            if (options.hasKey("onceLocationLatest")) { | 
|  | 246 | +                //获取最近3s内精度最高的一次定位结果 | 
|  | 247 | +                mLocationOption.setOnceLocationLatest(options.getBoolean("onceLocationLatest")); | 
|  | 248 | +            } | 
|  | 249 | +            if (options.hasKey("wifiActiveScan")) { | 
|  | 250 | +                //设置是否强制刷新WIFI,默认为强制刷新 | 
|  | 251 | +                //模式为仅设备模式(Device_Sensors)时无效 | 
|  | 252 | +                mLocationOption.setWifiActiveScan(options.getBoolean("wifiActiveScan")); | 
|  | 253 | +            } | 
|  | 254 | +            if (options.hasKey("mockEnable")) { | 
|  | 255 | +                //设置是否允许模拟位置,默认为false,不允许模拟位置 | 
|  | 256 | +                //模式为低功耗模式(Battery_Saving)时无效 | 
|  | 257 | +                mLocationOption.setMockEnable(options.getBoolean("mockEnable")); | 
|  | 258 | +            } | 
|  | 259 | +            if (options.hasKey("interval")) { | 
|  | 260 | +                //设置定位间隔,单位毫秒,默认为2000ms | 
|  | 261 | +                mLocationOption.setInterval(options.getInt("interval")); | 
|  | 262 | +            } | 
|  | 263 | +            if (options.hasKey("httpTimeOut")) { | 
|  | 264 | +                //设置联网超时时间 | 
|  | 265 | +                //默认值:30000毫秒 | 
|  | 266 | +                //模式为仅设备模式(Device_Sensors)时无效 | 
|  | 267 | +                mLocationOption.setHttpTimeOut(options.getInt("httpTimeOut")); | 
|  | 268 | +            } | 
|  | 269 | +            if (options.hasKey("protocol")) { | 
|  | 270 | +                switch (options.getString("protocol")) { | 
|  | 271 | +                    case "http": | 
|  | 272 | +                        mLocationOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP); | 
|  | 273 | +                        break; | 
|  | 274 | +                    case "https": | 
|  | 275 | +                        mLocationOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTPS); | 
|  | 276 | +                        break; | 
|  | 277 | +                    default: | 
|  | 278 | +                        break; | 
|  | 279 | +                } | 
|  | 280 | +            } | 
|  | 281 | +            if (options.hasKey("locationCacheEnable")) { | 
|  | 282 | +                mLocationOption.setLocationCacheEnable(options.getBoolean("locationCacheEnable")); | 
|  | 283 | +            } | 
|  | 284 | +        } | 
|  | 285 | +        return mLocationOption; | 
|  | 286 | +    } | 
|  | 287 | + | 
| 192 | 288 |     @Override | 
| 193 | 289 |     public void onHostResume() { | 
| 194 | 290 | 
 | 
|  | 
0 commit comments