android 获取经纬度 location 为null

@JavascriptInterfacepublicvoidgetGPS(){mActivity.runOnUiThread(newRunnable(){@Overrid... @JavascriptInterface
public void getGPS(){
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
double latitude = 0.00;
double longitude = 0.00;
String err = null;
LocationManager locationManager = (LocationManager) mActivity.getSystemService(Context.LOCATION_SERVICE);
//获取所有可用的位置提供器
List<String> providers = locationManager.getProviders(true);
String locationProvider;
if(providers.contains(LocationManager.GPS_PROVIDER)){
//如果是GPS
locationProvider = LocationManager.GPS_PROVIDER;
}else if(providers.contains(LocationManager.NETWORK_PROVIDER)){
//如果是Network
locationProvider = LocationManager.NETWORK_PROVIDER;
}else{
return;
}

//获取Location
Location location = locationManager.getLastKnownLocation(locationProvider);

if(location != null){
latitude = location.getLatitude();
//得到经度
longitude = location.getLongitude();
}else{
err = "has no location";
}
}
});
}

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
展开
 我来答
fight米
2016-12-26 · TA获得超过109个赞
知道小有建树答主
回答量:257
采纳率:100%
帮助的人:140万
展开全部

代码没有问题的;

之所以获取不到经纬度是因为 gps 定位有一定事件,而且要求比较苛刻,要在空旷的地方呆一会才能获取。

解决方法:

  1. 按照你现在的代码逻辑。可以先用network 模式定位 然后缓存下来经纬度,如果获取不到经纬度就使用network模式的经纬度。(正常情况下除非你的手机没有手机卡,并且手机么有连接到wifi network 模式都是可以获取经纬度的)

  2. 使用第三方sdk 比如百度 location sdk  或者高德定位sdk ,他们sdk 里面已经做了封装,默认先使用gps 定位如果gps定位失败再使用network 模式。这样做起来比较简单,就是需要集成sdk 配置环境。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
敲响天门
2016-12-26 · TA获得超过373个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:83.5万
展开全部
GPS信号接收问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式