react-native-position
v1.8.1
Published
react-native-position
Downloads
190
Maintainers
Readme
react-native-position
通过 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
请求位置
必要准备
- 注册华为开发者账号
- 创建项目和创建应用
- 获取到
apiKey
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 奇怪的配置)
TODO
- [ ] ios 实现
- [x] 附近 wifi 或基站信息获取, 加强网络定位
Contributing
See the contributing guide to learn how to contribute to the repository and the development workflow.
License
MIT
Made with create-react-native-library