Skip to content

Commit db93079

Browse files
committed
2 parents a60cf53 + b1ee9db commit db93079

File tree

3 files changed

+109
-52
lines changed

3 files changed

+109
-52
lines changed

README.md

Lines changed: 8 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Eleme location (based on amap) react native module.
77

88
Native module based on:
99

10-
- AMap Android sdk version: 3.1.0 .
10+
- AMap Android sdk version: 3.5.0 .
1111

1212
- AMap iOS sdk version:
1313

@@ -21,20 +21,20 @@ Native module based on:
2121

2222
#### Step 1
2323

24-
run ```npm install ele-react-native-location --save```
24+
run ```npm install react-native-amap-geolocation --save```
2525

2626
### 2.2 Android Configuration
2727

2828
- android/setting.gradle
2929

3030
```
31-
include ':ele-react-native-location'
32-
project(':ele-react-native-location').projectDir = new File(rootProject.projectDir, '../node_modules/ele-react-native-location/android')
31+
include ':react-native-amap-geolocation'
32+
project(':react-native-amap-geolocation').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-amap-geolocation/android')
3333
```
3434
- android/app/build.gradle
3535

3636
```
37-
compile project(":ele-react-native-location")
37+
compile project(":react-native-amap-geolocation")
3838
```
3939

4040
- MainApplication.java
@@ -51,26 +51,6 @@ compile project(":ele-react-native-location")
5151

5252
- AndroidManifest.xml
5353

54-
```
55-
<!--用于进行网络定位-->
56-
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
57-
<!--用于访问GPS定位-->
58-
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
59-
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
60-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
61-
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
62-
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
63-
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
64-
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
65-
<!--用于访问网络,网络定位需要上网-->
66-
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
67-
<!--用于读取手机当前的状态-->
68-
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
69-
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
70-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
71-
<uses-permission android:name="android.permission.INTERNET" />
72-
```
73-
7454
Remember setting your custom amap key as follows!
7555

7656
```
@@ -79,12 +59,11 @@ Remember setting your custom amap key as follows!
7959
android:name="com.amap.api.v2.apikey"
8060
android:value="请填写您的key"/>
8161
<!--高德地图APS服务设置-->
82-
<service android:name="com.amap.api.location.APSService" ></service>
8362
```
8463

8564
### 2.3 iOS Configuration
8665

87-
- Drag ./node_modules/ele-react-native-location/ios/ELMRNLocation.xcodeproj to your Main Project as a Library
66+
- Drag ./node_modules/react-native-amap-geolocation/ios/ELMRNLocation.xcodeproj to your Main Project as a Library
8867

8968
- Add AMap SDK to your project. AMap official tutorial is [here](http://lbs.amap.com/api/ios-location-sdk/guide/crest-project/manual-configuration/)
9069

@@ -106,7 +85,7 @@ Remember setting your custom amap key as follows!
10685
## 3. API
10786

10887
```
109-
import EleRNLocation from 'ele-react-native-location';
88+
import EleRNLocation from 'react-native-amap-geolocation';
11089
```
11190

11291
### 3.1 Start Location
@@ -233,7 +212,7 @@ import {
233212
View
234213
} from 'react-native';
235214
236-
import EleRNLocation from 'ele-react-native-location';
215+
import EleRNLocation from 'react-native-amap-geolocation';
237216
238217
239218
export default class LocationExample extends Component {
@@ -291,25 +270,3 @@ const styles = StyleSheet.create({
291270
292271
AppRegistry.registerComponent('LocationExample', () => LocationExample);
293272
```
294-
295-
## 5. Release Note
296-
- [*] 0.2.2
297-
- 升级高德SDK iOS 基础framework 到 V1.3.4
298-
- 升级高德SDK iOS 定位framework 到 V2.3.0
299-
- Fix [bug](https://github.com/Eleme-IMF/dodo/issues/11)
300-
- [*] 0.2.1
301-
- 升级高德SDK jar包到 V3.3
302-
- Fix [bug](https://github.com/Eleme-IMF/dodo/issues/9)
303-
- [*] 0.2.0
304-
- 兼容 RN 0.40
305-
306-
307-
## 5. Any Help
308-
309-
Issues and PR are welcomed!
310-
311-
Support wantted? Please contact:
312-
313-
- Android: [hongju.wang]([email protected])
314-
315-
- iOS: [liangliang.gao]([email protected])

android/proguard-rules.pro

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@
1515
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
1616
# public *;
1717
#}
18+
#定位
19+
-keep class com.amap.api.location.**{*;}
20+
-keep class com.amap.api.fence.**{*;}
21+
-keep class com.autonavi.aps.amapapi.model.**{*;}

android/src/main/java/me/ele/dodo/AMapLocationReactModule.java

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.amap.api.location.AMapLocationListener;
88
import com.facebook.react.bridge.Arguments;
99
import com.facebook.react.bridge.LifecycleEventListener;
10+
import com.facebook.react.bridge.Promise;
1011
import com.facebook.react.bridge.ReactApplicationContext;
1112
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1213
import com.facebook.react.bridge.ReactMethod;
@@ -21,7 +22,7 @@
2122

2223

2324
public class AMapLocationReactModule extends ReactContextBaseJavaModule implements AMapLocationListener, LifecycleEventListener {
24-
private static final String MODULE_NAME = "EleRNLocation";
25+
private static final String MODULE_NAME = "RNGeolocation";
2526
private AMapLocationClient mLocationClient;
2627
private AMapLocationListener mLocationListener = this;
2728
private final ReactApplicationContext mReactContext;
@@ -189,6 +190,101 @@ private WritableMap amapLocationToObject(AMapLocation amapLocation) {
189190
return map;
190191
}
191192

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+
192288
@Override
193289
public void onHostResume() {
194290

0 commit comments

Comments
 (0)