reactnative 获取定位_React Native使用高德地图获取地理位置定位 - Go语言中文社区

reactnative 获取定位_React Native使用高德地图获取地理位置定位


获取高德App Key

9 f3 Y/ _8 D( _! [9 ]$ E: W9 e# p) V5 F: U0 J3 u

为了使用高德 SDK,你需要准备高德 App Key,获取方法参考高德地图 SDK 官方文档:

# r3 ]2 M6 b. l9 k0 Q, K. e获取Android App Key; d* q: H, d1 w% @9 o

* L; c/ l/ Q1 f4 h- e% }- o1 v1、创建新应用

" z& N. X+ H4 ^1 d/ V进入高德地图控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。) T7 _& A0 W3   T$ i( J

8 A( a, p+ [, |- I( z

" f- A' u; p* F4 ?3 r

G1 q  r# ]3 t7 m( M! [/ E2 S2、添加新Key

0 L. J4 B, D' Z3 c- F在创建的应用上点击"添加"按钮,在弹出的对话框中,依次:输入应用名名称,选择绑定的服务为“Android平台SDK”,输入发布版安全码  SHA1、调试版安全码 SHA1、以及 Package,如下图所示:

" g: j" ~6 }2 d需要注意的是: 1个KEY只能用于一个应用(多渠道安装包属于多个应用),1个Key在多个应用上使用会出现服务调用失败。

3 P* S! o/ [0 }$ ^6 Q) W/ u3 D4 c1 E- U, M% q

$ G7 S% D: p; I在阅读完高德地图API服务条款后,勾选此选项,点击“提交”,完成 Key 的申请,此时您可以在所创建的应用下面看到刚申请的 Key 了。* J  J) w# Y' l. Z8 Z

如何获取 SHA1* W' b5 f, I$ w# ?) h( {

7 k# S* R/ n& Y. `调试版本(debug)和发布版本(release)下的 SHA1 值是不同的,发布 apk 时需要根据发布 apk 对应的 keystore 重新配置 Key。

) T+ c9 I# y. x* R$ F. a% p以下介绍使用Android Studio来获取对应的SHA1:: Z* r; ~/ r6 _3 Z$ G

第一步、打开 Android Studio 的 Terminal 工具。

8 B, o2 J; q: N; E6 P第二步、输入命令:keytool -v -list -keystore  keystore 文件路径。8 a* ~3 X( z/ A, G( J: n! B

第三步、输入 Keystore 密码3 M+ q, u6 {" O+ F; ]( R6 ]

+ |- h. C. c" `3 j- T( I' b9 O

如何获取 PackageName

}8 V( h0 T' t% G: G' V  r3 A6 M* d$ }. i& Z& G

Android Studio 可以通过 applicationId 配置包名,如果配置了 build.gradle 文件,PackageName 应该以 applicaionId 为准,防止 build.gradle 中的 applicationId 与 AndroidMainfest.xml 中的 PackageName 不同,导致 key 鉴权不过。

, R  B6 _- A4 T" d6 c$ W8 }/ D8 N

* S. f" B# p8 a8 F7 h" N3 c, P# L

9 `, t) G) c% Y& |4 U. D

提交后即可生成Android App Key:

6 Z" O9 U5 f+ b  ^5 E1 T% N- C. _3 b  S0 e8 e( [0 Y0 Y

开始使用

( x1 A0 L( v  j( M# k+ Q1 f. e- W0 a. m" ?2 W: [) M7 G; F

安装

! A0 J. f6 D9 {) O5 m+ w9 Z/ F8 `

. r$ |/ {0 g, X* U) Xyarn add react-native-amap-geolocation或npm install react-native-amap-geolocation --save自动配置(推荐)9 Z& V2 q# [. S1 G" f

+ U9 J7 _# n2 S7 R+ M

react-native link react-native-amap-geolocation手动配置

q5 k% J7 H0 S- b$ y- C0 u! g3 f3 V3 y1 D* _% A

一般情况下 react-native link 即可完成配置,如果因特殊原因无法使用 react-native link 或 link 失败,则可参照以下步骤检查并进行手动配置。1 j  i$ c1 X& F1 j5 l2 h  P

Android端

( `4 l  }2 W$ a3 Y! Q! k, I2 B0 m- ^0 t  ]

1.编辑 android/settings.gradle,设置项目路径:

- M# f) l/ a9 _/ u% K5 jinclude ':react-native-amap-geolocation'project(':react-native-amap-geolocation').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-amap-geolocation/lib/android')2.编辑 android/app/build.gradle,新增依赖:

8 Y$ Z0 I* @, c$ `6 l5 o4 p' @dependencies {   implementation project(':react-native-amap-geolocation')}3.编辑 MainApplication.java:

8 b4 f- B, V8 d$ Q% W! Cimport cn.qiuxiang.react.geolocation.AMapGeolocationPackage;public class MainApplication extends Application implements ReactApplication {  @Override  protected List getPackages() {         List packages = new PackageList(this).getPackages();         packages.add(new AMapGeolocationPackage());         return packages;  }}iOS端+ j% B( y7 A: B9 V$ q6 C. H& R

6 & v+ W5 C/ C" j/ ]6 m- J6 j待续。。。。。。。。。。。. J) |7 P& ]- L) ~1 y7 N

基本用法) t: H% D- I'   F9 t9 x! ]

) S9 p6 K2 H! F" wimport { PermissionsAndroid } from "react-native";import { init, Geolocation ,setLocatingWithReGeocode} from "react-native-amap-geolocation";  async componentDidMount() {        if (Platform.OS === "android") {            await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION);        }else{            setLocatingWithReGeocode(true)        }        await init({            ios: "9bd6c82e77583020a73ef35f59d0c759",            android: "dd25bc60566f854254f77a4bfa4f9b55"        });        this.getCurrentPosition()    }getCurrentPosition = () => {        Geolocation.getCurrentPosition(            position => this.updateLocationState(position),            error => this.updateLocationState(error)        );    };    updateLocationState(location) {        if (location) {            location.updateTime = new Date().toLocaleString();            let data = location.location            this.setState({                provinceName: data.province,                cityName: data.city,                areaName: data.district,            });        }    }回调数据:

$ S( {) |/ C) U

+ w! k) v* s# D' a$ _

更多用法9 M' f! `1 _* h

- c+ V) m4 M, H+ J! v  @该项目除了提供符合 Web 标准的 Geolocation API,同时为了最大程度的发挥高德定位 SDK 的功能, 会尽可能提供与原生 SDK 一致的接口封装。由于 iOS 和 Android SDK 提供的接口并不一致, 于是最终实现的接口大部分是并不通用的。这在接口文档或文档注释有注明, 比如 @platform android 表示该接口仅用于 Android。* k7 D1 N9 X. ~- q; S

以下是一些常用接口的用法说明以及示例代码,更多接口的具体用法请参考[接口文档]

4 ; p& s- Y  b0 {/ ]  ]直接使用原生接口& X- f9 G( x2 ^- w- l) r

. X/ k* R  G4

import { init, addLocationListener, start, stop } from "react-native-amap-geolocation";// 添加定位监听函数addLocationListener(location => console.log(location));// 开始连续定位start();// 在不需要的时候停止定位stop();逆地理编码

/ R2 e# O5 |9 [" b. H) }, U' c$ e# v1 v% q

Android 默认返回逆地理编码,而 iOS 需要手动设置。

6 Y, I% Q5 c; Y0 S" _import { setLocatingWithReGeocode, setNeedAddress } from "react-native-amap-geolocation";// androidsetNeedAddress(true);// iossetLocatingWithReGeocode(true);定位回调频率限

: C8 ~" d4 {# T) P+ z2 V% [

9 g6 a' X& E: {: C, v4 Oimport { setInterval, setDistanceFilter } from "react-native-amap-geolocation";// android,5 秒请求一次定位setInterval(5000);// ios,设备移动超过 10 米才会更新位置信息setDistanceFilter(10);

- `" j  q+ ( y3 f! z1 C6 U3 }Java吧 收集整理 java论坛 www.java8.com

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42321940/article/details/112027416
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-12 17:29:52
  • 阅读 ( 764 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢