android 经纬度获取为什么总是0

Allen/Gao Elex Android工程师  2014-11-04 03:07:02
package com.example.getlocation;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends Activity {

private LocationManager locationManager;
private TextView textView;
private double latitude = 0.0;
private double longitude = 0.0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.location_info);

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Location location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
} else {
LocationListener locationListener = new LocationListener() {

// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {

}

// Provider被enable时触发此函数,比如GPS被打开
@Override
public void onProviderEnabled(String provider) {

}

// Provider被disable时触发此函数,比如GPS被关闭
@Override
public void onProviderDisabled(String provider) {

}

// 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
@Override
public void onLocationChanged(Location location) {
if (location != null) {
Log.e("Map",
"Location changed : Lat: "
+ location.getLatitude() + " Lng: "
+ location.getLongitude());
}
}
};
locationManager
.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
1000, 0, locationListener);
Location location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude(); // 经度
longitude = location.getLongitude(); // 纬度
}
}
textView.setText("latitude:" + latitude + ",longitude" + longitude);
}

}






<!-- 连接互联网Internet权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- GPS定位权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...全文
788 点赞 收藏 14
写回复
14 条回复
Hanyu_Xia 2015年09月15日
我发现这个问题了,在4G网络下,系统的定位经纬度为(0,0),不知道你解决了这个问题没有,我们可以讨论下
回复 点赞
qq_22071769 2015年05月06日
哥,就只需要个jar包吗?
回复 点赞
Allen/Gao 2014年11月13日
用Android自带的LocationManager和Location获取位置的时候,经常会有获取的location为null的情况,并且操作起来也不是很方便,在这个Demo里我使用了百度地图API中的定位SDK,可以一次性获取当前位置经纬度以及详细地址信息,还可以获取周边POI信息,同时可以设定位置通知点,当到达某一位置时,发出通知信息等方式来告知用户。。麻烦大家,下载一个baidumapapi.jar,代码如下,验证通过非常理想,学习使人进步,谢谢热心帮助的人。效果图如下:



package BD.map;

import android.app.Activity;
import android.location.Location;
import android.os.Bundle;
import android.widget.TextView;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKBusLineResult;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKSuggestionResult;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;

public class BaiduMap extends Activity {
public TextView tv1, tv2;
public BMapManager mapManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1=(TextView)findViewById(R.id.result1);
tv2 = (TextView) this.findViewById(R.id.result2);

mapManager=new BMapManager(this);

mapManager.init("53351EE4BDE7BD870F41A0B4AF1480F1CA97DAF9", new MyMKGeneralListener());


mapManager.getLocationManager().setNotifyInternal(20, 5);


mapManager.getLocationManager().requestLocationUpdates(new MyLocationListener());

mapManager.start();


// mapManager = new BMapManager(this);
// mapManager.init("EDB67AD764D300895C95ABA02A4DDC58D5485CCD",
// new MyMKGeneralListener());
// // 设置通知间隔:iMaxSecond - 最大通知间隔,单位:秒;iMinSecond - 最小通知间隔,单位:秒
// mapManager.getLocationManager().setNotifyInternal(20, 5);
//
// mapManager.getLocationManager().requestLocationUpdates(
// new MyLocationListener());
// mapManager.start();

}
// 定位自己的位置,只定位一次
class MyLocationListener implements LocationListener {

@Override
public void onLocationChanged(Location arg0) {

double jindu1 = arg0.getLatitude();
double weidu1 = arg0.getLongitude();

int jindu = (int) (arg0.getLatitude()*1000000);
int weidu = (int) (arg0.getLongitude()*1000000);
tv1.setText("经度:" + jindu1 + ",纬度:" + weidu1);
System.out.println("经度:" + jindu1 + ",纬度:" + weidu1);
MKSearch search = new MKSearch();
search.init(mapManager, new MyMKSearchListener());
search.reverseGeocode(new GeoPoint(jindu, weidu));
}

}

class MyMKSearchListener implements MKSearchListener {

@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
if (arg0 == null) {
tv2.setText("没有获取想要的位置");
} else {
GeoPoint point = arg0.geoPt;
tv2.setText("地址:" + arg0.strAddr + ",坐标:"
+ point.getLatitudeE6() + "," + point.getLongitudeE6());
}
}

@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub

}

@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub

}

@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub

}

@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub

}

@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub

}

@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub

}



}

// 常用事件监听,用来处理通常的网络错误,授权验证错误等
class MyMKGeneralListener implements MKGeneralListener {

@Override
public void onGetNetworkState(int arg0) {

}

@Override
public void onGetPermissionState(int arg0) {

}

}
}


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="BD.map"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".BaiduMap"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问精确位置的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 访问网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 改变WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 读写存储卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取电话状态的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!-- 添加屏幕支持 -->>
<supports-screens android:largeScreens="true"
android:normalScreens="true" android:smallScreens="true"
android:resizeable="true" android:anyDensity="true"/>


</manifest>
回复 点赞
Allen/Gao 2014年11月13日
牛英雄也在北京吗,咱们两个经纬度差不多嘛
回复 点赞
Allen/Gao 2014年11月13日
楼上哥们正解,真的是在室外就行,但是为什么室内不行呢?百度是用什么技术呢,定位能力那么强,呵呵
回复 点赞
十三邵 2014年11月10日
你去室外试试吧,可能你公司信号不好,百度又不是靠你这个方法定位的,我有过经历,去室外就能测到了。。。
回复 点赞
Allen/Gao 2014年11月09日
请问设备权限不是Manifest中的权限吗?
回复 点赞
Allen/Gao 2014年11月09日
谢谢牛英雄和其他朋友们的热心帮助,但我的还不行啊,痛苦中。。。。。。。。。。。。。。。。。。。。
回复 点赞
Kifile 2014年11月08日
设备权限没给?
回复 点赞
牛hero牛 2014年11月07日
回复 点赞
牛hero牛 2014年11月07日
,你看
回复 点赞
牛hero牛 2014年11月07日
哥们,我这边试了,没有问题 不信我给你看
回复 点赞
Allen/Gao 2014年11月04日
百度地图都能获取位置,我自己写的程序难道不行吗
回复 点赞
a_tuzi 2014年11月04日
设备支持么?
回复 点赞
发动态
发帖子
Android
创建于2009-10-09

4.6w+

社区成员

9.0w+

社区内容

移动平台 Android
社区公告
暂无公告