6

我正在尝试使用 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

4 回答 4

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”事件可能不会触发。几年前当我弄清楚这些东西时,我放了一些“祝酒词”来提醒我我的纬度/经度坐标,因为我绕着街区走来验证事件正在触发。

于 2013-05-25T18:37:09.827 回答
3

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

如果是,重启设备应该会有所帮助,至少在一段时间内。

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

通过同时使用 Wifi、GPS 和网络定位,Google Play Services Location API 将隐藏网络定位被破坏的事实;只有当您既没有 GPS 也没有 Wifi 可用时,这一点才会很明显。

于 2014-01-22T10:29:27.650 回答
1

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

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

于 2012-06-06T20:48:59.437 回答
0

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

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

于 2017-03-07T12:58:32.477 回答