18、GPS技术
Android SDK为GPS提供了很多API,其中LocationManager类是这些API的核心。LocationManager是一个系统服务类,与TelephonyManager、AudioManager等服务类的作用和创建服务类对象的方法类似。所有与GPS相关的操作都由LocationManager对象及其派生的对象完成。
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationProvider类可以获取与位置提供者相关的信息。
Location类是对具体位置信息的抽象表示。
使用GPS定位的关键之一就是获取LocationProvider,每一个LocationProvider对象都表示一个抽象的定位系统。无论使用GPS做什么,都需要首先获取合适的LocationProvider对象。
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView; /**
* 得到 所有的LocationProvider。
* @author dr
*
*/
public class AllProvidersActivity extends Activity {
ListView mProviders;
LocationManager mLocationManager; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); mProviders = (ListView) findViewById(R.id.providers); // 首先应获取LocationManager对象
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 获取所有的LocationProvder的名称
List<String> providerNames = mLocationManager.getAllProviders(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, providerNames); mProviders.setAdapter(adapter);
}
}
根据名称获取LocationProvider
// 获取passive Location Provider
LocationProvider passiveProvider =
mLocationManager.getProvider(LocationManager.PASSIVE_PROVIDER);
// 获取gps Location Provider
LocationProvider gpsProvider =
mLocationManager.getProvider(LocationManager.GPS_PROVIDER);
// 获取network Location Provider
LocationProvider passiveProvider =
mLocationManager.getProvider(LocationManager.NETWORK_PROVIDER);

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.widget.EditText; public class LocationActivity extends Activity {
LocationManager mLocationManager;
EditText mEditText; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); mEditText = (EditText) findViewById(R.id.show); mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 从GPS获取最近的定位信息
Location location = mLocationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER); updateView(location); // 2000(2秒), 8(米)。
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
2000, 8, new LocationListener() { @Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
} @Override
public void onProviderEnabled(String provider) {
// 当GPS Location Provider可用时,更新位置
updateView(mLocationManager
.getLastKnownLocation(provider));
} @Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
} @Override // 位置发生变化。
public void onLocationChanged(Location location) {
// 当GPS定位信息发生改变时,更新位置
updateView(location);
}
}); } // 用来更新EditText中的信息
public void updateView(Location newLocation) {
if (newLocation != null) {
StringBuilder sb = new StringBuilder();
sb.append("实时的位置信息:\n");
sb.append("经度:");
sb.append(newLocation.getLongitude());
sb.append("\n纬度:");
sb.append(newLocation.getLatitude());
sb.append("\b高度:");
sb.append(newLocation.getAltitude());
sb.append("\n速度:");
sb.append(newLocation.getSpeed());
sb.append("\n方向:");
sb.append(newLocation.getBearing());
mEditText.setText(sb.toString()); }
}
}
<!-- 授权获取定位信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

mEditText = (EditText) findViewById(R.id.edittext);
final float[] results = new float[3]; Location.distanceBetween(20.123, 30.05644, 30.124, 40.543, results);
mEditText.setText(String.valueOf(results[0]) + "米");

import mobile.android.proximity.alert.R;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Bundle; public class ProximityAlertActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); double longitude = 123.427109;
double latitude = 41.764998;
float radius = 2000; //距离中心点半径,单位:米。 Intent intent = new Intent(this, PromimityAlertRecivery.class); // 任何情况下都可以发intent,除非关机。intent的话如果关闭当前activity或者程序,将终止。
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1,
intent, 0); locationManager.addProximityAlert(latitude, longitude, radius, -1,
pendingIntent);
}
}
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.widget.Toast; /**
* 广播接收器
* @author dr
*/
public class PromimityAlertRecivery {
public void onReceive(Context context, Intent intent) {
// 获取是否进入指定区域
boolean isEnter = intent.getBooleanExtra(
LocationManager.KEY_PROXIMITY_ENTERING, false);
if (isEnter) {
Toast.makeText(context, "您已经进入指定区域", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "您已经离开指定区域", Toast.LENGTH_LONG).show();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mobile.android.proximity.alert"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="cn.proximity.alert.ProximityAlertActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="cn.proximity.alert.ProximityAlertReciever" />
</application>
<!-- 授权获取定位信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/> </manifest>
18、GPS技术的更多相关文章
- GPS
百度百科 http://baike.baidu.com/link?url=Kl6eLdP-fveCsHt1wHF8TVuOR9wkT2K3qFnWy36PcaYaB1hdgOS_cnTEB0jIg ...
- 趣味GPS
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 简介 GPS的全称是全球定位系统(the Global Positioning S ...
- 【转】GPS连续运行单参考站解决方案
GPS连续运行单参考站解决方案 一. 前言 随着国家信息化程度的提高及计算机网络和通信技术的飞速发展,电子政务.电子商务.数字城市.数字省区和数字地球的工程化和现实化,需要采集多种实时地理 空间 ...
- [IC]Lithograph(1)光刻技术分析与展望
文章主体转载自: 1.zol摩尔定律全靠它 CPU光刻技术分析与展望 2.wiki:Extreme ultraviolet lithography 3.ITRS 2012 1. 光刻技术组成和关键点 ...
- 和菜鸟一起学android4.0.3源码之硬件gps简单移植【转】
本文转载自:http://blog.csdn.net/mwj19890829/article/details/18751447 关于Android定位方式 android 定位一般有四种方法,这四种方 ...
- 浅谈iOS需要掌握的技术点
鉴于很多人的简历中的技术点体现(很多朋友问我iOS需要知道注意哪些)! 技术点: 1.热更新 (及时解决线上问题) 2.runtime(json解析.数据越界.扩大button点击事件.拦截系统方法) ...
- GPS常识-B版(简)
第一章 绪论 1.简述GPS系统的特点有哪些? 在测绘工程中有如下优点:(1)定位精度高(2)观测时间短(3)测站间无需通视(4)可提供地心坐标(5)操作简便(6)全天候作业(7)功能多.应用广 GP ...
- GPS常识-A版(详)
第一章 绪论 1.简述GPS系统的特点有哪些? GPS在测绘工程中应用的优点 P13 ●定位精度高 应用实践证明,相对静态定位1小时以上观测解,其平面位置:在300-1500m范围内,绝对误差小于1m ...
- 窥见云技术未来大势,腾讯云Techo开发者大会即将在京召开
云.物联网.5G.人工智能……一项项技术的突破带来了天翻地覆的变化,开发者们是如何一次次地进行天马行空的创意和极限突破?2019年11月6日-7日,由腾讯云主办的首届Techo开发者大会将在北京嘉里大 ...
随机推荐
- Sqoop详细介绍包括:sqoop命令,原理,流程
一简介 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS ...
- wordpress学习二:源码目录结构和启动流程
wordpress安装后的文件目录如下: 其中的主要目录和文件用途介绍如下: wp-admin:用于进行博客后台设置的功能目录 wp-content: wordpress的 主题,插件和本地化的存储目 ...
- CreateFile,WriteFile,ReadFile
注意: CreateFile 跟 fopen 不同,打开文件时不区分 文本方式 或 二进制 方式 ReadFile 或 WriteFile 都是对二进制数据进行操作 HANDLE WINAPI Cre ...
- WebSphere常用设置
WebSphere常用设置 1.查看环境配置信息D:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\AboutThisPro ...
- JMS基本概念
原文:http://blog.csdn.net/jiuqiyuliang/article/details/46701559 The Java Message Service (JMS) API is ...
- Jenkins master在windows上安装
原文:http://www.cnblogs.com/itech/archive/2011/11/02/2233343.html 1 Jenkins Jenkins由以前的hudson更名而来.Jenk ...
- iOS:iPad和iPhone开发的异同(UIPopoverController、UISplitViewController)
iPad和iPhone开发的异同 1.iPhone和iPad: niPhone是手机,iPad.iPad Mini是平板电脑 iPhone和iPad开发的区别 屏幕的尺寸 \分辨率 UI元素的排布 \ ...
- Data Flow ->> OLE Command
这里有篇博客文章是讲这个OLE Command的:http://www.cnblogs.com/tylerdonet/archive/2011/06/20/2085490.html OLE Comma ...
- 解决NetworkOnMainThreadException
今天在Android 访问 WebService 的时候遇到,错误Caused by: android.os.NetworkOnMainThreadException,查了下原因上在4.0之后在主线程 ...
- 修改linux默认jdk版本
当你已经成功把jdk1.6.0_03 安装到 /usr/java,并且配置好了系统环境变量 执行 # java -version 时就是 显示jdk1.4.3,是因为你的linux系统有默认的jdk; ...