GPS核心API

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对象。

# 获取所有可用的LocationProvider(demo)。
 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);
}
}
 
# 根据条件(Criteria)获取LocationProvider(demo)。
 
 

根据名称获取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);
实时获取GPS定位数据
 
 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>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

最新文章

  1. JS preventDefault ,stopPropagation ,return false
  2. javascript每天一题
  3. Python的高级特性6:使用__slots__真的能省很多内存
  4. Virtualbox修改bios信息安装Windows XP OEM
  5. ASP.NET MVC API 路由生成规则
  6. Json对象与Json字符串互转
  7. 增强学习————K-摇臂赌博机
  8. 【LeetCode】6 - ZigZag Conversion
  9. TortoiseGit无法勾选Load Putty Key,该选项为灰色的解决办法
  10. 加入强调语气,使用&lt;strong&gt;和&lt;em&gt;标签
  11. C++ STL set集合容器
  12. Qt跨线程信号和槽的连接(默认方式是直连和队列的折中)
  13. Java编译成功,用java 运行class时出现错误解决方法
  14. Web学习-jsp实现servlet过程赏析
  15. 给新手--安装tomcat后username和password设置以及项目怎么部署在tomcatserver上
  16. PHP简单的长文章分页教程 附源码
  17. 变量和关系符和JAVA基本类型笔记与常考面试题
  18. disconf-自动注入属性变化
  19. setOnPageChangeListener 过时了怎么办?
  20. 使用Fiddler远程抓包

热门文章

  1. hadoop中的ssh无密码登录配置
  2. CNN卷积神经网络在自然语言处理的应用
  3. jdbc框架 commons-dbutils+google guice+servlet 实现一个例子
  4. ftrace的使用【转】
  5. android sqlite 一次创建多个表
  6. git add 之后因为没提交正确文件需要撤销
  7. BZOJ 2743 采花(树状数组)
  8. Python3 学习第十弹: 模块学习三之数字处理
  9. SQLite及ORMlite在WebApp中的使用
  10. UVa 11019 (AC自动机 二维模式串匹配) Matrix Matcher