代码以下:php
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文件中添加权限java
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
http://lbsyun.baidu.com/apiconsole/keyandroid
注册成为一名百度开发者,并申请API Key,注册页面以下git
注册成功,点击邮箱连接激活api
接下来正式申请API Key,注意事项看下面两图服务器
特别注意,每开发一个程序都应该从新申请Key,由于每次的包名不同
网络
点击提交以后就会看到本身申请的Key了app
接下来进入这个网址eclipse
http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-downloadide
下载Android版的SDK,接下来因为新旧版本以及指导书籍的不一样,会有不一样的作法,对我这个来讲,我用的是Eclipse+新版本的baiduAPI,找了很久在网上找到一篇可使用的教程连接是
http://blog.csdn.net/chenyufeng1991/article/details/46980733
如下详细介绍配置过程
<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" />
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
地图显示出来以后默认的是北京的地图,要定位到本身的位置须要加入下面代码
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; } }
// 设置设备显示在地图上的功能开启,不然设备的位置没法显示在地图上 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(); }
了解更多技术文章,欢迎关注个人我的公众号