LocationManager requestLocationUpdates不起作用

时间:2012-06-06 20:35:45

标签: android geolocation locationmanager

我正在尝试使用LocationManager和LocationListener获取android中的当前位置,如http://developer.android.com/guide/topics/location/obtaining-user-location.html所述

但是,从不调用LocationListener的onLocationChanged方法。我使用了一个真正的Android手机/也使用了模拟器和使用telnet更改的模拟位置,如上面的链接所述。

这是我的代码:

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /* Use the LocationManager class to obtain GPS locations */
        LocationManager mlocManager = (LocationManager) 
                getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocListener = new CustomLocationListener(
                getApplicationContext());
        // Location Providers
        String locationProvider = LocationManager.NETWORK_PROVIDER;
        // LocationProvider locationProvider = LocationManager.GPS_PROVIDER;
        mlocManager
                .requestLocationUpdates(locationProvider, 0, 0, mlocListener);
    }
}

和我的LocationListener:

public class CustomLocationListener implements LocationListener {

    private Context m_context;

    public CustomLocationListener(Context context) {
        m_context = context;
    }

    @Override
    public void onLocationChanged(Location location) {
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        String Text = latitude + " " + longitude;
        Toast.makeText(m_context, Text, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO
    }

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}

因此永远不会调用onLocationChanged。 谁能看到问题? 非常感谢

4 个答案:

答案 0 :(得分:4)

您还可以让手机确定最佳提供商,而不仅仅是设置

String locationProvider = LocationManager.NETWORK_PROVIDER;

请改为尝试:

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);   
String locationProvider = mlocManager.getBestProvider(criteria, true);

此外,您是否已将设备移至新位置进行测试?否则“onlocationchanged”事件可能不会触发。几年前,当我弄清楚这些东西的时候,当我绕着街区行走以确认事件正在开火时,我放了一些“吐司”来提醒我我的纬度/经度坐标。

答案 1 :(得分:3)

对我来说这看起来像Android Bug 57707

如果是,重启设备应该有所帮助,至少暂时。

或者您可以使用Google Play Services Location API

通过同时使用Wifi,GPS和网络定位,Google Play服务位置API将隐藏网络定位被破坏的事实;只有当你既没有GPS也没有Wifi时,这种情况才会显而易见。

答案 2 :(得分:1)

确保在“设置”中启用了正确的位置服务。您还可以使用isProviderEnabled()检查您选择的特定提供商是否有效。并确保您在清单中拥有COARSE或FINE位置权限。

另外,请确保您在设备上进行测试。网络位置在模拟器中根本不起作用,只有在使用模拟工具注入新数据点时,GPS才会起作用。

答案 3 :(得分:0)

我遇到过类似的问题。 Try replacing getApplication() with MainAvtivity.this

此外,请确保您保留FINE和COARSE位置的权限。如果您的目标API超过23,您还应该从java代码处理权限。