Android LocationManager请求LocationUpdate不';行不通

Android LocationManager请求LocationUpdate不';行不通,android,geolocation,locationmanager,Android,Geolocation,Locationmanager,我正在尝试使用LocationManager和LocationListener获取android中的当前位置,如中所述 但是,永远不会调用LocationListener的onLocationChanged方法。我使用了一部真正的android手机/还使用了模拟器,并使用telnet模拟了位置的改变,如上面的链接所述 这是我的密码: public class MyActivity extends Activity { @Override public void onCreate

我正在尝试使用LocationManager和LocationListener获取android中的当前位置,如中所述

但是,永远不会调用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);
    }
}
还有我的位置听众:

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。 有人能看到这个问题吗??
非常感谢

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


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

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

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”事件可能不会触发。几年前,当我弄清楚这件事的时候,我放了一些“吐司”来提醒我在街区周围走动时的纵横坐标,以确认事件是否发生了。

我觉得这很像

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

或者你也可以用这个


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

我也遇到过类似的问题<代码>尝试将getApplication()替换为MainAvActivity。这


此外,请确保您保留对精细和粗糙位置的权限。如果您的目标API超过23,您还应该处理java代码的权限。

您是否已在手机上启用GPS服务,并确认您应该有一个位置?(等待几分钟并不是确认,如果你在一个糟糕的服务区,30分钟可能不够……)必须问:你有清单中指定的位置权限吗?@dymmeh是的,我在manifest@Sam我不理解网络供应商不使用手机的gps@DanDinu对不起,我看错了你的问题。如您所知,网络位置不需要启用GPS服务,它需要启用网络提供商。能解决你的问题吗?您的代码看起来很好。不幸的是,
isProviderEnabled()
不能像广告中那样工作。请看:我如何才能让模拟器“转到一个新的位置”@MathiasLykkegaardLorenzen:我总是用一个设备开发,但是如果你遵循Dan Dinu上面原始问题的链接,看起来你可以在模拟器中模拟这个位置。转到那篇文章的底部,看“在模拟器控制台中使用“geo”命令”。将我的设备移动到一个新位置解决了这个问题!谢谢