GPS位置提取永远不会停止在ICS上

时间:2012-02-07 14:05:56

标签: android gps android-4.0-ice-cream-sandwich locationmanager

我尝试使用LocationListener进行两步位置检测。它按预期在每个Android版本上按预期工作。仅在ICS上我无法停止GPS位置检测。

// inner class inside my PoiActivity
private class CustomLocationListener implements LocationListener {
    String currentProvider = LocationManager.NETWORK_PROVIDER;

    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            if (currentProvider.equals(LocationManager.NETWORK_PROVIDER)) {
                System.out.println(this);
                mLastKnownLocation = location;
                mHandler.sendEmptyMessage(0);
                mLocationManager.removeUpdates(this);
                Log.i("CustomLocationListener", "Got a rough location, removing the network listener ");
                Toast.makeText(PoiActivity.this, "Network found and removed", Toast.LENGTH_LONG).show();
                mLocationManager
                        .requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, Constants.LOCATION_MAX_ACCURACY, this);
                currentProvider = LocationManager.GPS_PROVIDER;
            } else if (location.getAccuracy() < Constants.LOCATION_MAX_ACCURACY
                       && currentProvider.equals(LocationManager.GPS_PROVIDER)) {
                System.out.println(this);
                mLastKnownLocation = location;
                mHandler.sendEmptyMessage(0);
                mLocationManager.removeUpdates(this);
                Log.i("CustomLocationListener", "Got a rough location, removing the gps listener ");
                Toast.makeText(PoiActivity.this, "GPS found and removed", Toast.LENGTH_LONG).show();
            }
        }
    }

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}
}

根据Toast和LogCat信息,删除了侦听器,除了ICS之外的每个版本,我都看到GPS图标消失了。在ICS上,图标会在几秒钟后重新出现,但我从未多次获得Toasts,因此我的听众被成功移除。

使用任务管理器或应用程序信息杀死应用程序不会阻止GPS图标反复出现。

我想这是一个特定的ICS问题,但我找不到针对该问题或类似问题描述的错误报告。

有人有解决方法吗?因为我不希望用户感觉我多次拉电池而没有任何好处消耗电池......

1 个答案:

答案 0 :(得分:0)

我看过几个来源(其中没有一个是明确的)暗示图标状态可能无法反映GPS芯片的状态。为了确定GPS是否实际运行,您可以编写一个测试应用程序,该应用程序仅使用PASSIVE_PROVIDER并触发Toast,或者如果源是GPS,则将位置发送到位置更改的文本框。

虽然我的手机图标似乎表现得很好,但我写了一个测试'脏应用程序',它只删除onDestroy中的位置更新而不是onPause。因此,当我启动此应用程序并按“主页”时,它会进入后台,但会启用GPS。如果我然后运行被动提供程序应用程序,则会选择位置更新。

你可以做一些类似的事情,以便让你的思绪得到休息,(或其他方式)。