Android 防止GPS在搜索位置时耗尽手机电池

Android 防止GPS在搜索位置时耗尽手机电池,android,gps,android-location,Android,Gps,Android Location,我正在使用LocationManager的方法requestLocationUpdates获取手机的位置 我使用GPS作为提供商,并使用LocationListener更新我的应用程序的UI 我需要每1000毫秒对我的活动调用一个方法。为此,我将requestLocationUpdates配置如下: locationManager.requestLocationUpdates(provider, 0, 1000, listener); 一切都很顺利。调用onLocationChanged方法,

我正在使用LocationManager的方法
requestLocationUpdates
获取手机的位置

我使用GPS作为提供商,并使用
LocationListener
更新我的应用程序的UI

我需要每1000毫秒对我的活动调用一个方法。为此,我将
requestLocationUpdates
配置如下:

locationManager.requestLocationUpdates(provider, 0, 1000, listener);
一切都很顺利。调用
onLocationChanged
方法,纬度和逻辑度显示为ok

但我有一些疑问

  • 如果我在一个没有GPS信号的地方怎么办
  • 有一些
    自动
    超时
    
  • 或者,应用程序会一直尝试使用GPS获取位置,并耗尽电池电量
  • 如果我切换到
    WiFI/3G
    Provider,并且信号也不工作,会发生什么情况?事情也是这样吗

  • 我在互联网上搜索答案,但找不到正确的解决方案。

    例如,假设您驾驶的是一辆汽车,LocationManager已连接到有效的GPS提供商。现在你开车穿过隧道,失去了信号。现在不再触发
    onLocationChanged()
    。但该系统将继续在后台搜索有效的GPS提供商。如果您通过隧道,系统将重新连接到GPS提供商(如果仍然可用),并再次触发
    onLocationChanged()

    在连接和获取位置更新时,电池的耗电量比系统寻找有效提供商时要高得多

    如果您切换到WiFi或3G,系统将查找最后一组提供商,并覆盖上一组提供商。但行为将是一样的

    您可以通过监视
    LocationListener.onStatusChanged()回调和接口对此事件做出反应。例如,切换到另一个提供程序,或者如果没有提供程序可用,请调用
    removeLocationUpdates()
    ,并在一段时间后使用
    计时器再次调用
    requestLocationUpdates()
    。这将更好地节省您的电池

    编辑:

    LocationManager.isProviderEnabled(LocationManager.GPS\u提供程序)
    如果在设备设置中启用了GPS,则返回true。没有迹象表明您已连接到GPS提供商。 使用该方法可以知道哪个提供程序可用


    请注意:如果您在房间内,您几乎永远无法连接到GPS。

    1。如果你没有GPS,也没有提供商信号,你将无法获得位置。2.据我所知,它将一直运行,直到您或服务器停止它(一旦您达到最大请求,服务器将停止它)。3.是的,经常发出请求(特别是每1000毫秒一次,尽管它不会真的那么快)会耗尽你的电池。4.如果您切换到您的提供商,但他们的工作不正常,您将无法获得更新。你必须有某种连接才能获取位置更新。因此,使用GPS或WiFi/3G,没有信号,如果我不设法停止“拉动”,电池将耗尽?。有一些正确的方法可以做到这一点??谢谢如果你没有信号,它只会继续寻找,最终会耗尽你的电池。你可以设置某种计时器,一旦你在一段时间内没有收到信号,它就会停止你的服务,并在有信号时提示用户重试。我正在测试这种情况。我在我的房子里(里面没有GPS信号)。我运行我的应用程序。应用程序使用locationManager.isProviderEnabled(locationManager.GPS\U提供程序)检查GPS;并返回true。但是,当方法locationManager.requestLocationUpdates(provider,0,1000,listener)时;调用,开始尝试获取信号,但什么都没有发生。未调用任何LocationListener方法。不仅位置改变,状态改变,什么都没有。在这种情况下,电池耗尽了,我不知道该怎么做谢谢你的回答。所以你是在告诉我我是对的。问题是不存在任何截断GPS拉力的方法?。没有办法添加超时?这是一种正确而简单的方法?是的,只有RemovelocationUpdate(…)将停止此机制。