【问题标题】:Android onLocationChanged stopped being calledAndroid onLocationChanged 停止被调用
【发布时间】:2014-02-23 20:03:16
【问题描述】:

我有一个片段:

public  class myMap extends Fragment implements LocationListener
{
  // do all the usual stuff
@Override
public void onResume()
{
    super.onResume();

    if(mIsGPSEnabled)
    {
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, this);
    }
    // and of course a bit more of code I am skipping
}
@Override
public void onLocationChanged(Location location) {      
    Toast.makeText(getActivity(), "location changed  " + location.getLatitude() + " " + location.getLongitude(), Toast.LENGTH_LONG).show();

}

我注意到以下行为:

  1. onResume 始终获取最后一个正常工作的已知位置。
  2. 在我的通知栏上启动应用程序时,我看到这个 GPS 处于开启状态的小图标
  3. 过了一会儿,我第一次调用了 onLocationChanged(到目前为止一切都很好)
  4. 现在,小 GPS 图标从通知栏中消失了,并且再也不会调用 onLocationChanged。该应用始终处于前台
  5. 我从不(暂时)取消注册我的位置更改监听器
  6. 我将我的应用程序置于后台并启动 osmand(一种导航软件),而该软件正在运行时,我在每次更新时都会在 onLocationChanged 中看到我的 toast,并且正常工作。

谁有想法?

【问题讨论】:

  • 您确定它不是在请求更新吗?您将最短请求时间设置为 1 分钟,因此您至少在一分钟内不会收到更新
  • 是的,我确定,在镇上等了 15 分钟...
  • 你在 HTC Hero 上进行测试吗?

标签: android gps locationlistener


【解决方案1】:

检查是否

mLocationManager != null

如果为 null,您可以 requesteLocationUpdates 否则避免调用 requests

【讨论】:

  • 我在调试器中检查过,它不为空。如果它为空,那么即使是第一次更新也不起作用,但这是有效的。
  • 好的,但是多次调用 requesteUpdates 是错误的。您应该调用一次。
【解决方案2】:

使用日志并使用free logcat app 观看它,以确保您的位置没有更新:

  Toast.makeText(getApplicationContext(), "location changed  " + location.getLatitude() + " " + location.getLongitude(), Toast.LENGTH_LONG).show();

因为我不认为您的默认主屏幕是一项活动!这就是为什么 toast 会出现在 osmand 和您的应用程序中,而不会出现在主屏幕中。

所以我认为你遇到了一个著名的 android location api 问题,我花了 30 多天才知道有很多人有同样的问题!,如果你看看这里,你会感觉更好https://code.google.com/p/android/issues/detail?id=57707

问题没有限制没有算法没有特殊情况:>>获得第一个位置,停止一段时间,完美工作两天,然后切换工作n停止一周......!

我认为你必须购买新的测试手机!

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 2019-02-07
    • 2017-01-20
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多