2012-12-12 21 views
3

问题很简单:对于启用特定提供程序时要调用的位置侦听器的onProviderEnabled()方法,该侦听器是否必须已请求来自同一提供程序的更新?仅当侦听器为该提供者注册时才调用onProviderEnabled?

例如,如果您注册网络服务商与位置管理位置更新:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 
       0, locationListener); 

监听器有一个onProviderEnabled()方法:

@Override 
    public void onProviderEnabled(String provider) { 
     Log.d(TAG, provider + " provider enabled"); } 

如果我现在打开GPS位置提供商将onProviderEnabled调用?

从我所经历的情况来看,不会调用它,除非位置侦听器也被注册接收来自GPS提供者的更新。如果它应该是这样的,那么就需要向GPS和网络提供商注册,以便通知它已启用。

可以从尚未启用的位置提供商处注册更新吗?

回答

4

For a location listener's onProviderEnabled() method to be called when a specific provider is enabled, must that listener have already requested updates from that same provider?

是的,你需要注册一个供应商能够从中得到一个回调。

这是向一个提供程序注册的操作,通知该提供程序存在一个侦听程序。如果你没有注册,现在有办法让它知道听众存在。

Is it ok to register for updates from a location provider that is not yet enabled?

是的。

问候。

+0

谢谢。我检查的全部原因是因为我认为可能注册一个未启用的位置提供程序正在破坏我的应用程序中的某些内容。很少,我的位置提供商似乎陷入困境,并且不提供任何新的位置。奇怪的是谷歌地图仍然正常工作。但是,在我的应用程序中,位置监听器在两个提供商处均可以正常注册,但在重新启动手机之前,没有找到新的位置!重新启动/卸载/清除应用程序上的数据不能解决问题。发生这种情况时,GPS将停止工作,GPSLocationProvider可让手机保持清醒状态。 – Flyview

+0

我必须告诉你,我从来没有遇到类似的事情,这不是由于我的应用程序中的错误而导致的。你首先说Google地图仍然可以工作,然后它停止了所有的应用程序。你能澄清吗?你是在'Service'还是'Thread'类中注册监听器?这可能会导致类似的情况。 – Luis

+0

网络位置适用于谷歌地图,但GPS不会显示在谷歌地图中(就好像它已关闭)。虽然GPS被卡住可能是一个单独的问题。我在这里提出了一个新问题:http://stackoverflow.com/questions/13849748/network-provider-stops-providing-updates – Flyview

相关问题