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"/> 展开
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"/> 展开
展开全部
代码没有问题的;
之所以获取不到经纬度是因为 gps 定位有一定事件,而且要求比较苛刻,要在空旷的地方呆一会才能获取。
解决方法:
按照你现在的代码逻辑。可以先用network 模式定位 然后缓存下来经纬度,如果获取不到经纬度就使用network模式的经纬度。(正常情况下除非你的手机没有手机卡,并且手机么有连接到wifi network 模式都是可以获取经纬度的)
使用第三方sdk 比如百度 location sdk 或者高德定位sdk ,他们sdk 里面已经做了封装,默认先使用gps 定位如果gps定位失败再使用network 模式。这样做起来比较简单,就是需要集成sdk 配置环境。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询