|
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