1. 使用LocationManager获取地理位置信息

代码如下:

private TextView positiontext;
private String provider;
private LocationManager manager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); positiontext = (TextView) findViewById(R.id.tv_show1); // 使用LocationManager获取地理位置信息,先得到LocationManager对象
// 调用Context的getSystemService()方法接受一个字符串用于确定获取系统的哪个服务
// 传入Context.LOCATION_SERVICE这个服务
manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 先用一个List集合获取所有可用的位置提供器
List<String> providerlist = manager.getProviders(true); // 选择一个位置提供器来确定设备当前位置,有三种可供选择,但是必须在设置中提前打开相关权限
// NETWORK_PROVIDER使用网络定位,精度差,耗电量少,用的较多
// GPS_PROVIDER使用GPS定位,精度高,耗电量高,用得较多
// PASSIVE_PROVIDER用的较少
if (providerlist.contains(LocationManager.GPS_PROVIDER)) {
provider = LocationManager.GPS_PROVIDER;
} else if (providerlist.contains(LocationManager.NETWORK_PROVIDER)) {
provider = LocationManager.NETWORK_PROVIDER;
} else {
Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_LONG).show();
} // 将选择好的位置提供器传入到getLastKnownLocation()得到一个Location对象;
// 这个Location对象中包含了经度、纬度、海拔等一系列信息,然后提取需要的信息
Location location = manager.getLastKnownLocation(provider); if (location != null) { // 显示当前的位置信息
positiontext.setText("latitude is " + location.getLatitude() + "\n"
+ "Longitude is " + location.getLongitude()); } // requestLocationUpdates()方法实时更新用户的位置信息,接收四个参数
// ①第一个参数是位置提供器的类型
// ②第二个参数是监听位置变化间隔的毫秒数
// ③第三个参数是监听位置变化间隔的距离,达到设定距离时,触发第四个参数的监听器的onLocationChanged()方法,
// 并把新的位置信息作为参数传入
// ④第四个参数是LocationListener()监听器接口,所以应该传入的是它的实现类的对象
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10,
listener);
} @Override
protected void onDestroy() {
super.onDestroy();
// 关闭程序时将监听器移除
if (manager != null) {
manager.removeUpdates(listener);
}
} // 定义LocationListener()监听器接口的实现类
LocationListener listener = new LocationListener() { @Override
public void onStatusChanged(String provider, int status, Bundle extras) { } @Override
public void onProviderEnabled(String provider) { } @Override
public void onProviderDisabled(String provider) { } @Override
public void onLocationChanged(Location location) {
// 更新当前位置信息
positiontext.setText("latitude is " + location.getLatitude() + "\n"
+ "Longitude is " + location.getLongitude()); }
};

注意事项:Manifest文件中添加权限

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

2. 使用百度地图显示

①登录网址

http://lbsyun.baidu.com/apiconsole/key

注册成为一名百度开发者,并申请API Key,注册页面如下

注册成功,点击邮箱链接激活

接下来正式申请API Key,注意事项看下面两图

特别注意,每开发一个程序都应该重新申请Key,因为每次的包名不一样

点击提交之后就会看到自己申请的Key了

接下来进入这个网址

http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download

下载Android版的SDK,接下来由于新旧版本以及指导书籍的不同,会有不同的做法,对我这个来说,我用的是Eclipse+新版本的baiduAPI,找了好久在网上找到一篇可以使用的教程链接是

http://blog.csdn.net/chenyufeng1991/article/details/46980733

以下详细介绍配置过程

①如下图所示,箭头所指的地方都打勾,点击开发包进行下载

②下载完成后,会有多个jar包和一个armabi文件夹,把jar包和armabi文件夹复制到Eclipse工程目录下的libs文件夹下。如图:

③在百度服务器端的配置已经全部完成,下面开始写代码,在AndroidMenifest.xml中添加:

这里特别注意,添加的这一段代码必须放在原来的application里面位置,如下面代码所示

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="BtM2ugHA16R8fvdyAc5cyxR9Q6GGMyoF" /> <activity
android:name=".SecondActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
</activity>
</application>

④添加权限:参考百度开发文档链接见⑦

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 这是使用LocationManager获取地理位置信息的时候要用的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- //获取设备网络状态,禁用后无法获取网络状态 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- //网络权限,当禁用后,无法进行检索等相关业务 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- //读取设备硬件信息,统计数据 -->
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<!-- //读取系统信息,包含系统版本等信息,用作统计 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- //获取设备的网络状态,鉴权所需网络代理 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- //允许sd卡写权限,需写入地图数据,禁用后无法显示地图 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- //获取统计数据 -->
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- //鉴权所需该权限获取进程列表 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- //使用步行AR导航,配置Camera权限 -->

⑤在布局文件中添加地图控件:

特别注意,这里的代码提示不会体现出来,所以需要自己敲出这些代码

<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />

⑥在MainActivity.java中添加代码:

MapView mMapView = null;// 用于显示地图的控件;

	@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 初始化地图SDK,注意一定要写在
// setContentView(R.layout.activity_main)代码前
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_second); // 绑定控件;
mMapView = (MapView) findViewById(R.id.bmapView); } @Override
protected void onResume() {
super.onResume();
// 管理地图的生命周期:显示
mMapView.onResume();
} @Override
protected void onPause() {
super.onPause();
// 管理地图的生命周期:暂停
mMapView.onPause();
} @Override
protected void onDestroy() {
super.onDestroy();
// 管理地图的生命周期:销毁
mMapView.onDestroy();
}

⑦具体更多内容请参考百度地图开发文档:

http://developer.baidu.com/map/index.php?title=androidsdk/guide/hellobaidumap

3. 使用百度地图定位到自己的位置

地图显示出来之后默认的是北京的地图,要定位到自己的位置需要加入下面代码

MapView mMapView = null;// 用于显示地图的控件;
private BaiduMap map; // 百度地图提供的总控制器类
private boolean showmapflag = true; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 初始化地图SDK,注意一定要写在
// setContentView(R.layout.activity_main);代码前; Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_second); // 绑定控件;
mMapView = (MapView) findViewById(R.id.bmapView);
// 获取BaiduMap对象
map = mMapView.getMap(); // 开始将经纬度坐标显示到地图的具体位置上
if (showmapflag == true) { String[] location_data = data.split("=");
// 借助LatLng类让地图定位到某一个经纬度,传入的参数是double类型的经纬度坐标值
double my_latitude = Double.parseDouble(location_data[0]);
double my_longitude = Double.parseDouble(location_data[1]);
LatLng lng = new LatLng(my_latitude, my_longitude); // animateMapStatus()将地图定位到指定的经纬度上
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(lng);
map.animateMapStatus(update); // 这里用来设置地图的缩放级别
// MapStatusUpdateFactory的zoomTo()方法传入3-19之间的float数据
update = MapStatusUpdateFactory.zoomTo(12f);
map.animateMapStatus(update); // 这个变量的作用是防止多次调用animateMapStatus()方法,
// 因为我们不动,只需要在程序第一次定位的时候显示一次即可
showmapflag = false; } }

4. 使用百度地图定位到自己的位置并标记出来

①开启功能

// 设置设备显示在地图上的功能开启,否则设备的位置无法显示在地图上
map.setMyLocationEnabled(true);

②设备位置显示

// 这是用来在地图上标记自己位置的代码,这段代码必须在if(showmapflag == true)语句
// 的外面,因为地图只需要加载一次,但是自己的位置应该是实时更新的
// MyLocationData.Builder类用来封装设备当前所在位置的
MyLocationData.Builder builder = new MyLocationData.Builder(); // 将经纬度传入MyLocationData.Builder类对应的方法中
builder.latitude(my_latitude);
builder.longitude(my_longitude); // build()方法生成一个MyLocationData对象
MyLocationData locationData = builder.build(); // 将MyLocationData对象传入到BaiduMap的setMyLocationData()方法中
// 就可以在地图上将自己的位置显示出来
map.setMyLocationData(locationData);

③功能关闭

@Override
protected void onDestroy() {
super.onDestroy();
// 程序退出时设置设备显示在地图上的功能关闭
map.setMyLocationEnabled(false);
// 管理地图的生命周期:销毁
mMapView.onDestroy();
}

了解更多技术文章,欢迎关注我的个人公众号

Android位置服务开发的更多相关文章

  1. Android 位置服务——BaiduLocation的使用

    原文:Android 位置服务--BaiduLocation的使用 版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处并给出连接. https://blog.csdn.net/To ...

  2. Android 位置服务

    原文来自:http://developer.android.com/guide/topics/location/strategies.html 位置策略 注意: 本指南仅限android.locati ...

  3. Android实现传感器应用及位置服务

    Android实现传感器应用及位置服务 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 这里需用获取加速度传感器和地磁传感器,手机获取旋转的方 ...

  4. [译]:Xamarin.Android平台功能——位置服务

    返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...

  5. Android开发9:网络访问&Web服务开发

    前言 啦啦啦各位小伙伴们好~ 一起进入我们今天的主题.今天我们将和大家学习网络访问和Web服务开发的相关知识,一起学习熟练使用 HttpURLConnection 访问 WebService,熟悉使用 ...

  6. (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图

    (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图 http://www.cnblogs.com/macroxu-1982/archive/2011/09/13 ...

  7. 【Android】第18章 位置服务和手机定位—本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-03-04 一.简介 目前,基于位置的服务发展迅速,已涉及到商务.医疗.定位.追踪.敏感区域警告.工作和生活等各个方面.定位服务融合了G ...

  8. 基于java开发的开源代码GPS北斗位置服务监控平台

    最近在研究位置服务平台,基于全球卫星定位技术(GNSS).互联网技术.空间地理信息技术(GIS).3G/4G无线通信技术,面向全国公众用户建立大容量.实时.稳定的位置信息服务运营平台.实现管理目标的实 ...

  9. (译)cocos2d-x跨android&ios平台开发入门教程

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

随机推荐

  1. win10安装motionbuilder失败,怎么强力卸载删除注册表并重新安装

    一些搞设计的朋友在win10系统下安装motionbuilder失败或提示已安装,也有时候想重新安装motionbuilder的时候会出现本电脑windows系统已安装motionbuilder,你要 ...

  2. UML 类图介绍

    UML 类图介绍 一. UML 简介 UML ( Unified Modeling Language )即统一建模语言,是 OMG ( Object Management Group )发表的图标式软 ...

  3. 吴裕雄--天生自然 R语言开发学习:时间序列

    #-----------------------------------------# # R in Action (2nd ed): Chapter 15 # # Time series # # r ...

  4. NBA球星的生意经 个人流量化之路

    个人流量化之路" title="NBA球星的生意经 个人流量化之路"> 在国人欢天喜地的庆祝新春佳节之时,大洋彼岸也在进行着让全球篮球迷为之"着魔&quo ...

  5. 正则表达式入门-python代码

    题记 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例. 正则表达式在很多的应用中都有使用到,特别是在网络爬虫中格式化html后取出自 ...

  6. java design pattern - adapter pattern

    场景 适配器模式 总结 参考资料 场景 在编程中我们经常会遇到驴头不对马嘴的情况,比如以前是继承A的接口的对象,现在外部调用的时候需要该对象已B接口的形式来调用 ,这个时候我们可以让对象同时集成A和B ...

  7. 设计模式详解及PHP实现:代理模式

    [目录] 代理模式(Proxy pattern) 代理模式是一种结构型模式,它可以为其他对象提供一种代理以控制对这个对象的访问. 主要角色 抽象主题角色(Subject):它的作用是统一接口.此角色定 ...

  8. 创建git密钥

    前言 git使用https协议,每次pull,push都要输入密码,使用git协议,使用ssh秘钥,可以省去每次输密码 大概需要三个步骤: 一.本地生成密钥对: 二.设置github上的公钥: 三.修 ...

  9. Solr查询配置及优化【eDisMax查询解析器】

    一.简介 Lucene查询解析器语法支持创建任意复杂的布尔查询,但还有一些缺点,它不是用户查询处理的理想解决方案.这里面最大的问题是Lucene查询解析器的语法要求严格,一旦破坏就会抛出异常.指望用户 ...

  10. NSURLSession的前世今生

    系统网络框架架构图 前世-NSURLConnection NSURLConnection是苹果提供的原生网络访问类,已经有10多年的历史了,它从 iOS 2.0 开始,一直到iOS9被废弃.异步方法在 ...