我当前的应用使用“位置”软件包(link)来获取用户当前的纬度和经度,以用于查找附近的设施。
这是我正在使用的代码(类似于文档中的示例)
Map<String, double> _currentLocation;
Map<String, double> _startLocation;
StreamSubscription<Map<String, double>> _locationSubscription;
String error;
bool _permission = false;
Location _location = new Location();
// Platform messages are asynchronous, so we initialize in an async method.
initPlatformState() async {
Map<String, double> location;
try {
_permission = await _location.hasPermission();
location = await _location.getLocation();
error = null;
} on PlatformException catch (e) {
if (e.code == 'PERMISSION_DENIED') {
error = 'Permission denied';
} else if (e.code == 'PERMISSION_DENIED_NEVER_ASK') {
error = 'Permission denied - please ask the user to enable it from the app settings';
}
location = null;
}
setState(() {
_startLocation = location;
print("Starting coordinates: ${_startLocation["latitude"]}, ${_startLocation["longitude"]}");
});
}
@override
void initState() {
super.initState();
initPlatformState();
_locationSubscription =
_location.onLocationChanged().listen((Map<String,double> result) {
setState(() {
_currentLocation = result;
print("Current coordinates: ${_currentLocation["latitude"]}, ${_currentLocation["longitude"]}");
});
});
}
我面临的唯一问题是,每当全新安装该应用程序的新apk时,在授予位置权限后,该应用程序都找不到位置。
在授予位置信息后,我设置了一条打印语句以打印出用户的位置,但是由于某种原因,它并不是第一次打印任何内容。重新启动应用程序后,它会正确打印出位置。
安装后首次打开
重新启动应用程序后
使用Location软件包的任何专家都可以帮助我解决此问题吗?
答案 0 :(得分:2)
根据插件的源代码,当您调用componentWillMount() {
const { navigation } = this.props;
const myproperty = navigation.getParam('myproperty', '0');
this.setState({ property: myproperty});
}
方法时,它会要求getLocation
获得所需的权限,然后进行处理。根据Google的docs:
此方法异步运行。它立即返回,并在用户响应提示后,系统使用结果调用应用程序的回调方法
,但是flutter插件有一个issue关于Android 6+的位置回调的信息,作为一种解决方法,建议使用SDK 21。
因此,该插件的“本机”部分似乎不适用于Android 6+。有两种解决方法:
同时,我对插件的问题很感兴趣,因为它的实现似乎不错,因此,如果我找到解决方法,请回到这里。