`
longgangbai
  • 浏览: 7338826 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

   在osmdroid中给基于位置的代理类如下:

package org.osmdroid;

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

public class LocationListenerProxy implements LocationListener {
	private final LocationManager mLocationManager;
	private LocationListener mListener = null;

	public LocationListenerProxy(final LocationManager pLocationManager) {
		mLocationManager = pLocationManager;
	}

	public boolean startListening(final LocationListener pListener, final long pUpdateTime,
			final float pUpdateDistance) {
		boolean result = false;
		mListener = pListener;
		for (final String provider : mLocationManager.getProviders(true)) {
			if (LocationManager.GPS_PROVIDER.equals(provider)
					|| LocationManager.NETWORK_PROVIDER.equals(provider)) {
				result = true;
				mLocationManager.requestLocationUpdates(provider, pUpdateTime, pUpdateDistance,
						this);
			}
		}
		return result;
	}

	public void stopListening() {
		mListener = null;
		mLocationManager.removeUpdates(this);
	}

	@Override
	public void onLocationChanged(final Location arg0) {
		if (mListener != null) {
			mListener.onLocationChanged(arg0);
		}
	}

	@Override
	public void onProviderDisabled(final String arg0) {
		if (mListener != null) {
			mListener.onProviderDisabled(arg0);
		}
	}

	@Override
	public void onProviderEnabled(final String arg0) {
		if (mListener != null) {
			mListener.onProviderEnabled(arg0);
		}
	}

	@Override
	public void onStatusChanged(final String arg0, final int arg1, final Bundle arg2) {
		if (mListener != null) {
			mListener.onStatusChanged(arg0, arg1, arg2);
		}
	}
}

 

 

获取当前的位置:

package org.osmdroid.util;

import org.osmdroid.util.constants.UtilConstants;

import android.location.Location;
import android.location.LocationManager;

public class LocationUtils implements UtilConstants {

	/**
	 * This is a utility class with only static members.
	 */
	private LocationUtils() {
	}

	/**
	 * Get the most recent location from the GPS or Network provider.
	 * @param pLocationManager
	 * @return return the most recent location, or null if there's no known location
	 */
	public static Location getLastKnownLocation(final LocationManager pLocationManager) {
		if (pLocationManager == null) {
			return null;
		}
		final Location gpsLocation =
			pLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
		final Location networkLocation =
			pLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
		if (gpsLocation == null) {
			return networkLocation;
		} else if (networkLocation == null) {
			return gpsLocation;
		} else {
			// both are non-null - use the most recent
			if (networkLocation.getTime() > gpsLocation.getTime() + GPS_WAIT_TIME) {
				return networkLocation;
			} else {
				return gpsLocation;
			}
		}
	}

}

 

 

具体的使用如下:

启动时候:

   mLocationListener = new LocationListenerProxy(mLocationManager);
   result = mLocationListener.startListening(this, mLocationUpdateMinTime,
     mLocationUpdateMinDistance);

停止时候:

  if (mLocationListener != null) {
   mLocationListener.stopListening();
  }

  mLocationListener = null;

 

针对指南针使用的感应事件代理:

 

package org.osmdroid;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

public class SensorEventListenerProxy implements SensorEventListener {
	private final SensorManager mSensorManager;
	private SensorEventListener mListener = null;

	public SensorEventListenerProxy(final SensorManager pSensorManager) {
		mSensorManager = pSensorManager;
	}

	public boolean startListening(final SensorEventListener pListener, final int pSensorType,
			final int pRate) {
		final Sensor sensor = mSensorManager.getDefaultSensor(pSensorType);
		if (sensor == null)
			return false;
		mListener = pListener;
		return mSensorManager.registerListener(this, sensor, pRate);
	}

	public void stopListening() {
		mListener = null;
		mSensorManager.unregisterListener(this);
	}

	@Override
	public void onAccuracyChanged(final Sensor pSensor, final int pAccuracy) {
		if (mListener != null) {
			mListener.onAccuracyChanged(pSensor, pAccuracy);
		}
	}

	@Override
	public void onSensorChanged(final SensorEvent pEvent) {
		if (mListener != null) {
			mListener.onSensorChanged(pEvent);
		}
	}

}

 

使用时:

 

  if (mSensorListener == null) {
   mSensorListener = new SensorEventListenerProxy(mSensorManager);
   result = mSensorListener.startListening(this, Sensor.TYPE_ORIENTATION,
     SensorManager.SENSOR_DELAY_UI);
  }

 

	if (mSensorListener != null) {
			mSensorListener.stopListening();
		}

		// Reset values
		mSensorListener = null;

 

 

 

分享到:
评论

相关推荐

    GIS基础知识讲解_gis学习资料_gis_gis基础知识_

    GIS的基础知识包括以下几个关键部分: 1. 地图学基础:地图是GIS的核心,理解地图投影、比例尺、图例等基本概念至关重要。地图投影是指将球面或曲面的地理信息转换到平面上的方法,如墨卡托投影、UTM投影等。比例尺...

    gis学习文档gis学习文档gis学习文档

    GIS学习主要包括以下几个方面: 1. **GIS基础理论**:理解GIS的核心概念,如空间数据模型(矢量和栅格)、坐标系与投影、地理编码、空间关系等。这些基础知识是GIS分析和应用的基础。 2. **GIS软件操作**:熟悉...

    基于Vue实现一个功能简单的GIS数据大屏案例源码.zip

    【资源说明】基于Vue实现一个功能简单的GIS数据大屏案例源码.zip基于Vue实现一个功能简单的GIS数据大屏案例源码.zip基于Vue实现一个功能简单的GIS数据大屏案例源码.zip基于Vue实现一个功能简单的GIS数据大屏案例源码...

    基于Skyline的三维景观GIS系统的实现

    为了实现基于Skyline的Web三维GIS系统,本研究着重探讨了以下几个关键技术: ##### 3.1 XML与数据交换 XML(可扩展标记语言)是一种用于标记电子文档的语言,它被广泛应用于不同系统之间的数据交换。在三维GIS中,...

    看漫画学习GIS(gis学习漫画版)

    《看漫画学习GIS》是一本独特且创新的学习资料,它通过漫画的形式,使GIS学习变得更加生动有趣,尤其适合初学者和对GIS感兴趣的人群。 GIS的历史可以追溯到20世纪60年代,当时的主要应用集中在土地规划和资源管理...

    ArcObjects GIS 应用开发 基于 C#.NET

    《ArcObjects GIS 应用开发 基于 C#.NET》是江西理工大学兰小机、刘德儿两位专家编著的一本专业书籍,主要聚焦于使用C#.NET语言进行GIS(地理信息系统)应用的开发。ArcObjects是Esri公司提供的核心开发组件,它允许...

    基于GIS的数量方法与应用 doc版

    通过学习《基于GIS的数量方法与应用》,读者不仅可以掌握GIS的基本操作,还能深入理解GIS在解决复杂空间问题时的数量方法。这有助于提升对空间数据的理解,增强数据分析和决策支持的能力,对于从事地理学、环境科学...

    基于gis最短路径算法优化

    ### 基于GIS的城市道路网最短路径算法优化 #### 概述 在现代城市交通管理中,寻找从一个地点到另一个地点的最短路径是一个至关重要的问题。这一问题不仅涉及交通规划、物流配送等领域,而且对于提高城市交通效率、...

    基于arcgis平台二次开发的小型GIS系统

    本篇文章将深入探讨基于ArcGIS平台的二次开发,特别是如何利用C#语言和Visual Studio 2005创建一个小型GIS系统。 首先,我们要理解二次开发的概念。二次开发是指在已有的软件基础上,根据特定需求进行定制化的开发...

    基于三维GIS系统景区综合管理系统

    基于三维GIS系统景区综合管理系统基于三维GIS系统景区综合管理系统

    基于GIS的数量方法与应用

    《基于GIS的数量方法与应用》是一本由王发辉编著的专业书籍,主要探讨了GIS(Geographic Information System,地理信息系统)在人文地理研究中的实际应用。这本书是人文地理学者和GIS技术人员的重要参考资料,旨在...

    基于虚拟GIS(VGIS)、三维GIS(3DGIS)的辅助地理教学

    【基于虚拟GIS(VGIS)、三维GIS(3DGIS)的辅助地理教学】 地理教学是教育体系中的一个重要组成部分,随着科技的发展,虚拟GIS(VGIS)和三维GIS(3DGIS)的应用为地理教学带来了全新的可能性。这两种技术的引入...

    基于arcobjects与c#.net的gis应用开发 源代码-兰_gis_

    在GIS(地理信息系统)领域,基于ArcObjects与C#.NET的开发是构建地图应用程序和进行空间数据处理的常见方法。ArcObjects是Esri公司提供的一个强大的API(应用程序接口),它允许开发者利用C#等.NET语言来创建桌面、...

    基于vc++的GIS二次开发

    通过这个基于VC++的GIS二次开发项目,你可以深入学习C++编程技巧,同时提升GIS应用的开发能力。项目中的"shpread ultimate"可能是一个用于展示、编辑或分析地理数据的组件或工具,具体功能需要查看源代码或文档来...

    GIS学习网站大全

    很全面的、各种各样的地理信息系统学习网站

    基于GIS与VR技术的三维城市

    ### 基于GIS与VR技术的三维城市 #### 一、引言 近年来,随着计算机科学技术和信息技术的迅速进步,“数字城市”概念逐渐成为推动城市发展的重要力量之一。数字城市的核心在于利用先进的信息技术来实现城市的信息化...

    基于三维GIS的地理教学辅助系统设计与开发

    本文讨论的基于Google Earth API开发的网络三维GIS地理教学辅助系统的建设目标、设计思路、技术框架及主要功能的使用,为地理教学提供了全新的视角。Google Earth API是Google提供的一个工具集,允许开发者利用...

Global site tag (gtag.js) - Google Analytics