`
104zz
  • 浏览: 1503997 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

android基于Gps 定位和基站定位获取经纬度

阅读更多

 

一:新建MyLocationManager.java类,本类是为了代码架构方便把地位经纬度的代码在这类中实现然后通过回调方法,在activity中显示;

package com.android.location;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class MyLocationManager {
	private static Context mContext;
	private LocationManager gpsLocationManager;
	private LocationManager networkLocationManager;
	private static final int MINTIME = 2000;
	private static final int MININSTANCE = 2;
	private static MyLocationManager instance;
	private Location lastLocation = null;
	private static LocationCallBack mCallback;

	public static void init(Context c, LocationCallBack callback) {
		mContext = c;
		mCallback = callback;
	}

	private MyLocationManager() {
		// Gps 定位
		gpsLocationManager = (LocationManager) mContext
				.getSystemService(Context.LOCATION_SERVICE);
		Location gpsLocation = gpsLocationManager
				.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		gpsLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
				MINTIME, MININSTANCE, locationListener);
		// 基站定位
		networkLocationManager = (LocationManager) mContext
				.getSystemService(Context.LOCATION_SERVICE);
		Location networkLocation = gpsLocationManager
				.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		networkLocationManager.requestLocationUpdates(
				LocationManager.NETWORK_PROVIDER, MINTIME, MININSTANCE,
				locationListener);
	}

	public static MyLocationManager getInstance() {
		if (null == instance) {
			instance = new MyLocationManager();
		}
		return instance;
	}

	private void updateLocation(Location location) {
		lastLocation = location;
		mCallback.onCurrentLocation(location);
	}

	private final LocationListener locationListener = new LocationListener() {

		public void onStatusChanged(String provider, int status, Bundle extras) {
		}

		public void onProviderEnabled(String provider) {
		}

		public void onProviderDisabled(String provider) {
		}

		public void onLocationChanged(Location location) {
			updateLocation(location);
		}
	};

	public Location getMyLocation() {
		return lastLocation;
	}

	private static int ENOUGH_LONG = 1000 * 60;

	public interface LocationCallBack {
		/**
		 * 当前位置
		 * 
		 * @param location
		 */
		void onCurrentLocation(Location location);
	}

	public void destoryLocationManager() {
		gpsLocationManager.removeUpdates(locationListener);
		networkLocationManager.removeUpdates(locationListener);
	}
}
   

 

二:在LocationActivity 中实现LocationCallBack接口,如下:

package com.android.location;

import android.app.Activity;
import android.location.Location;
import android.os.Bundle;
import android.widget.TextView;
import com.android.fzmap.R;
import com.android.location.MyLocationManager.LocationCallBack;

public class LocationActivity extends Activity implements LocationCallBack {

	private TextView desText;
	private MyLocationManager mLocation;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		desText = (TextView) this.findViewById(R.id.text);
		MyLocationManager.init(LocationActivity.this.getApplicationContext(),
				LocationActivity.this);//初始化
		mLocation = MyLocationManager.getInstance();//获取实例

	}

	//回调定位信息
	public void onCurrentLocation(Location location) {
		if (location != null) {
			// 显示定位结果
			desText.setText("当前经度:" + location.getLongitude() + "\n当前纬度:"
					+ location.getLatitude());
		}
	}

	// 关闭程序也关闭定位
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		mLocation.destoryLocationManager();
	}

}
   

三:AndroidManifest.xml中不要忘了要添加访问网络和启动定位等的几个权限

 

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 

 

四:效果如下图:


  • 大小: 22.5 KB
分享到:
评论
4 楼 jo_nes 2015-08-06  
就一个GPS定位,别忽悠人啊
3 楼 zhanglfat 2013-07-30  
基站个毛,不要误导大家
2 楼 lonuery 2013-05-20  
楼主我想问一下,有时候我们通过上面的这种方法获取基站定位数据时,在有网络的情况下,也无法保证每次都能够正常的获取经纬度数据,这个是什么情况呢?求解答!
1 楼 Will.Du 2013-01-14  
挺好,本来想自己整合两种方式,看了你的,我就不用费事儿了。。。

相关推荐

    GPS基站(Android Studio 3.5.2 )

    GPS 基站 原生定位可运行的GPS获取经纬度和获取基站例子(环境Android Studio 3.5.2扒拉能运行的例子找到太辛苦了要么版本太老。)

    Android获取当前位置的经纬度数据

    现在有这么一个需求:开启一个Service服务,获取当前...Android手机获取当前位置的方式:GPS定位,WIFI定位,基站定位,当前Demo使用GPS卫星定位,在LocationTool中返回Location、LocationManager两者对象,通过Loca

    Android实现Service获取当前位置(GPS+基站)的方法

    通过GPS+基站获取经纬度,先通过GPS来获取,如果为空改用基站进行获取–&gt;GPS+基站(基站获取支持联通、电信、移动)。 2)、实时获取经纬度 为了达到实时获取经纬度,需在后台启动获取经纬度的Service,然后把经纬度...

    baidu LBS android SDK

    在android开发中地图和定位是很...很多人将它和基站定位混为一谈,但其实AGPS的本质仍然是GPS,只是它会使用基站信息对获取GPS进行辅助,然后还能对获取到的GPS结果进行修正,所以AGPS要比传统的GPS更快,准确度略高。

    Android例子源码后台定时定位开机自启

    (第三方地图API的选择,具体还要根据自己的项目要求来选择)言归正传,现在就说说百度的定位API 吧 (该文章,主要是讲定位的,所以就单独说说,百度的定位API 接口)百度定位API,是 GPS 基站 WIFI IP混合定位,...

    Location GPS定位

    Android GPS,基站获取经纬度~调用百度地图~将经纬度转换为位置 内附源码

    超级工程师1.12 For Android

     微波天线计算:支持GPS定位,获取经纬度和海拔信息,根据经纬度可以计算两点的弧面距离和近端天线方位角,然后根据弧面距离和天线海拔计算近端天线仰角(远端天线计算同前)。同时还可保存当前的地理位置信息,并...

    后台定时定位开机自启系统.zip

    后台定时定位开机自启系统android 类库中, 虽然已经提供了几种定位方式,但是从提供的功能和反应速度上,和其他的第三方定位库相比,还是相形见绌。...2. 在定位的回调函数里,将定位获取的信息保存到本地   

    android 的permisson

    获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 获取精确位置 android.permission.ACCESS_FINE_LOCATION,通过GPS芯片...

    android 权限大全 分享

    获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米获取精确位置 android.permission.ACCESS_FINE_LOCATION,通过GPS芯片...

    后台定时定位开机自启系统

    (第三方地图API的选择,具体还要根据自己的项目要求来选择)言归正传,现在就说说百度的定位API 吧 (该文章,主要是讲定位的,所以就单独说说,百度的定位API 接口)百度定位API,是 GPS+基站+WIFI+IP混合定位,...

Global site tag (gtag.js) - Google Analytics