通过 Android’s Location API 和 HMS Location REST API 获取位置信息。
解决 Google’s Location Services API 无法使用时,也能获取位置信息。
- 不需要集成第三方 SDK, 只需要调用 Https 请求
- 由于 HMS 不需要商业授权, 只需要按量付费(HMS 位置服务)(安卓定位方案的价格对比)
- 可获取附近的
wifi信息时, 通过HMS Location REST API请求位置 - 无
wifi信息时, 尝试Android’s Location API请求 - 保底情况, 通过
cell信息HMS Location REST API请求位置
- 注册华为开发者账号
- 创建项目和创建应用
- 获取到
apiKeyscreenshot-20241020-051107 GNSS需要<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />和<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />权限wifi需要<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />和<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />权限cell需要<uses-permission android:name="android.permission.READ_PHONE_STATE" />权限
npm install react-native-position
import { PermissionsAndroid } from 'react-native' import { getCurrentPosition } from 'react-native-position' const getLocation = async () => { const granteds = await PermissionsAndroid.requestMultiple([ PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION, PermissionsAndroid.PERMISSIONS.READ_PHONE_STATE, ]) if ( granteds['android.permission.ACCESS_FINE_LOCATION'] !== 'granted' || granteds['android.permission.ACCESS_COARSE_LOCATION'] !== 'granted' || granteds['android.permission.READ_PHONE_STATE'] !== 'granted' ) { console.log('权限拒绝') return } return await getCurrentPosition({ hmsKey: 'your hms key', GNSStimeout: 5000, }) }
- 使用
HMS服务中需要遵守关于华为开发者联盟与隐私的声明 - 尽量保证
Android 10 (API 29)以上 mnc< 10 时, 需要设置为 0(HMS 奇怪的配置)
- ios 实现
- 附近 wifi 或基站信息获取, 加强网络定位
See the contributing guide to learn how to contribute to the repository and the development workflow.
MIT
Made with create-react-native-library