android getlastknownlocation在模拟器中始终为null

时间:2014-02-05 16:35:47

标签: java android

这似乎是一个常见的问题,但我真的不明白为什么它会发生,即使我读了很多类似的问题。

我在模拟器设备上玩基本位置类,我设置了所有内容 - 权限(FINE和COARSE),我在DDMS中设置了坐标我也尝试使用telnet然后,但不管它总是如何在getlastknownlocation的行上遇到了nullpointer异常,这里有什么想法错了吗?

public class MainActivity extends Activity implements LocationListener {



private static LocationManager ok;
private Location L;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    ok=(LocationManager)this.getSystemService(ok.GPS_PROVIDER);
    L=ok.getLastKnownLocation(ok.GPS_PROVIDER);












}

@Override
public void onLocationChanged(Location Loc) {


    try {


        double latop=Loc.getLatitude();
        double longe=Loc.getLongitude();

        Log.i("OK", "and"+longe+""+latop);


    } catch (NullPointerException e)

    {

    }




}

3 个答案:

答案 0 :(得分:8)

getLastKnownLocation()一般会返回null,如果最近没有应用请求您所需提供商的位置修复。

在模拟器上,它似乎更进了一步:除非已经将一个位置传递到模拟器,否则您不会获得位置,因为您的应用已调用requestLocationUpdates()

使用getLastKnownLocation()的一般模式,如果您希望得到实际Location的合理赔率,则使用requestLocationUpdates()removeLocationUpdates()来确保LocationManager通过您选择的提供商积极寻找地点。当然,如果您愿意,也可以使用LocationListeneronLocationChanged(),而不是getLastKnownLocation()

答案 1 :(得分:0)

还有另一个选择,可以使用locationManager.addTestProvider()创建自己的提供程序。这样您就可以进行自己的测试。

答案 2 :(得分:0)

@CommonsWare的答案很明确。要在模拟器上获取非空值,请转到import mlflow.sklearn model = mlflow.sklearn.load_model(..) model.predict(...) 应用程序,然后获得一些位置