我正在尝试使用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" />
清单中的。
那我怎么能让它发挥作用呢?
答案 0 :(得分:0)
这是因为你的loc变量为null - 当缓存中没有最后一个位置时会发生这种情况。
getLastKnownLocation()
不返回当前位置,它会返回您或其他应用先前获得的位置。要接收当前位置,您需要使用locationManager.requestLocationUpdates()
订阅位置更新。如果用户启用了提供商(GPS,网络或被动),并通过回调发送位置更新,则会启动提及的提供商(GPS,网络或被动)。
答案 1 :(得分:0)
拥有DDMS透视图并手动将经度和经度发送到模拟器。因为模拟器没有#39;来检索位置状态