在React Native中在Android上获取用户位置时遇到问题 我已经设置了正确的权限,并且正在获取位置,但它没有回到我的组件。在日志中看到以下内容
W/MessageQueue: Handler (android.location.LocationManager$ListenerTransport$1) {6456d95} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.location.LocationManager$ListenerTransport$1) {6456d95} sending message to a Handler on a dead thread
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:543)
at android.os.Handler.enqueueMessage(Handler.java:631)
at android.os.Handler.sendMessageAtTime(Handler.java:600)
at android.os.Handler.sendMessageDelayed(Handler.java:570)
at android.os.Handler.sendMessage(Handler.java:507)
at android.location.LocationManager$ListenerTransport.onLocationChanged(LocationManager.java:248)
at android.location.ILocationListener$Stub.onTransact(ILocationListener.java:58)
at android.os.Binder.execTransact(Binder.java:461)
使用react-native 0.25.01,targetSdk 23
关于为什么会发生这种情况的任何想法?会喜欢一些输入:) 我的实现只是来自文档(http://facebook.github.io/react-native/docs/geolocation.html#content)
的复制粘贴答案 0 :(得分:0)
我不确定这对你有多大帮助,但我已经创建了一个适用于Android(Genymotion Emulator)的示例。
它在react-native 0.26.3上运行,你可以在GitHub上看到https://github.com/AidenMontgomery/react-native-sample
我从未见过您所遇到的实际错误,但我知道有一个有效的例子可以帮助我解决问题。
答案 1 :(得分:0)
为了后代,请使用以下npm软件包,该软件包最近在ReactNative 0.60.4中进行了测试。
import Geolocation from 'react-native-geolocation-service';
请确保请求位置服务权限,该权限应为:
//Request location permission
async componentWillMount(){
try {
await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION);
} catch (err) {
console.warn(err);
}
}
定义一个异步函数来提取当前位置。
_mapLocation = async () => {
await Geolocation.getCurrentPosition(
position => {
var x: LatLng = {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
};
//Here I am collecting gps coordinates in a collection.
var tempMarkers = this.state.markers;
tempMarkers.push({latlng: x, title: '', description: ''});
this.setState({markers: tempMarkers});
},
error => {
console.warn(error.message);
},
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 10000 }
)
}
最后是一个如何执行新创建的异步函数的示例:
<Button title='Map Location' type='solid' onPress={() => this._mapLocation()} />