使用GPS获取我在Android中的当前位置

时间:2014-04-05 12:05:10

标签: android gps

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

给出以下代码:

    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 Studios尝试使用模拟器调试它时,它会卡在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引用为空。

我有:

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

那我怎么能让它发挥作用呢?

2 个答案:

答案 0 :(得分:0)

这是因为你的loc变量为null - 当缓存中没有最后一个位置时会发生这种情况。

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

答案 1 :(得分:0)

拥有DDMS透视图并手动将经度和经度发送到模拟器。因为模拟器没有#39;来检索位置状态