2014-04-05 75 views
0

我正在尝试使用GPS获取当前位置。使用GPS获取我目前在Android的位置

考虑下面的代码:

LocationManager manager = (LocationManager)this. 
      getSystemService(Context.LOCATION_SERVICE); 

    Location loc = manager.getLastKnownLocation(
      LocationManager.GPS_PROVIDER); 

    loc=manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

    double la=loc.getLatitude(); 
    double lon=loc.getLongitude(); 

当使用AVD仿真器定义的固定坐标,或者当我的Android智能手机进行测试,这是行不通的。

而在Android的工作室试图与模拟器调试它,得到它贴在loc.getLatitude。总体而言,在年底,我得到了一个Java RuntimeException,如下图所示:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.social.gps/com.example.social.gps.MainActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
     . 
     . 
     . 

我猜想它,因为loc引用为null。

我:

<uses-permission 
    android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission 
    android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
在清单

那么我怎样才能使它工作?

+0

安置自己的堆栈跟踪的其余部分,请。 '这里NullPointerException'可能意味着什么 - 上下文通过为null,等... – ChuongPham

回答

0

有无DDMS透视与手动发送经纬度给emulator.Because仿真器不检索位置状态

0

这是因为您的loc变量为空 - 它发生在缓存中没有最后一个位置时。

getLastKnownLocation()不返回当前位置,它返回由您或其他一些应用先前获得的位置。要接收当前位置,您需要使用locationManager.requestLocationUpdates()订阅位置更新。如果用户启用并通过回叫发送位置更新,那么将启动提及的提供商(GPS,网络或被动)。

+0

但我使用地理修复命令,并根据Android的手册册添加到仿真器的位置,这是获得位置 – user2162550

+0

做的方式'getLastKnownLocation()'工作,一些应用程序需要先获取位置。我想地理修复不会直接设置最后一个位置,只是调用LocationManager更新命令。为了接收这些更新并将它们存储在最后一个位置缓存中,您需要订阅它们。 –

+0

@ user2162550我的意思是,当您通过地理修补程序发送位置时,位置管理器会发现没有人订阅更新,只是放弃它而不更新其缓存。 –