我有一个小应用程序来获取位置,然后在地图上显示它。
在onCreate()
中,我启动了LocationService和地图。然后我想调用我的setLocation()
方法来确定我的位置并将其显示在地图上。
如果我从setLocation()
调用onCreate()
方法,它就不起作用并显示吐司。如果我从setLocation()
致电onResume()
,那就有效。可能是什么原因?
来源:Github
感谢您的帮助。如果您需要其余代码的某一部分,请告诉我。
答案 0 :(得分:0)
永远不要通过构造函数自己创建服务实例。 GPSService
没有任何理由存在,更不用说是Service
了。话虽如此,getPos()
将返回null
,直到您获得位置修复为止。究竟何时会发生这种情况是不确定的。
同样,永远不要通过构造函数自己创建活动实例。 MapsActivity
完全没有理由存在,更不用说成为Activity
的实际子类了。话虽如此,mapActivity
中的MainActivity
字段将null
,直到onMapAsync()
被调用。究竟何时会发生这种情况也是不确定的。
因此,您无法从setLocation()
或onCreate()
可靠地致电onResume()
。毕竟,你可能无法真正获得一个位置。
此外,如果您的targetSdkVersion
为23或更高,您的应用程序将在Android 6.0+设备上崩溃,因为您在询问获取运行时权限之前尝试获取位置,更别说它被授予了。
在您拥有位置并拥有地图之前,无法进行mapActivity.moveCamera(location)
来电。您需要安排在onMapReady()
和onLocationChanged()
中查看您是否同时拥有这两项数据,然后调用mapActivity.moveCamera(location)
。
此外,FWIW,您的WRITE_EXTERNAL_STORAGE
<uses-permission>
元素位于清单中的错误位置。 <uses-permission>
元素必须是根<manifest>
元素的直接子元素,而不是<application>
的子元素。