android实现GPS定位
??? 实现GPS定位功能主要是引入百度地图的包import com.baidu.mapapi
???
??? 要引入则需要先下载百度地图移动版API开发包由于下载过程较为繁琐;我这里将提供现成的压缩文件
??? 如果需要,可以自由下载;
??? 得到API开发包后还要得到密钥,即Key;为方便大家学习,这里也将提供自由的Key;
??
只需将这密钥复制到后面的代码上就可以了(22FCFCD052AAAE640F34D608D98CDED68B0744A5)
??? 嗯,现在我们可以准备创建android项目了;创建好项目后、将APi开发包中的baidumap.jar文件引入
??? 到项目名下;其步骤是:右键项目名,找到Properties,在目录下找到->java Build Path-接着在
??? >Libraries中选择"Add JARs",找到并选定baidumapapi.jar;这样就可以使用API了。
???
???
??? 由于版本不同的原因、有些项目里面没有libs文件夹,如果有的话就不用新建了;然后再将
??? baidumap.jar文件复制到libs文件中、还要将libBMapApiEngine_v1_3_3.so复制到工程目录下的libs
??? \armeabi。
? 在敲入代码之前、我们需要增加地图的使用权限;在Mainfest中、增加使用者的权限:
其代码是:
- <uses-permission?android:name="android.permission.ACCESS_NETWORK_STATE"?> ??
- ????</uses-permission> ??
- ????<uses-permission?android:name="android.permission.ACCESS_FINE_LOCATION"?> ??
- ????</uses-permission> ??
- ????<uses-permission?android:name="android.permission.INTERNET"?> ??
- ????</uses-permission> ??
- ????<uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"?> ??
- ????</uses-permission> ??
- ????<uses-permission?android:name="android.permission.ACCESS_WIFI_STATE"?> ??
- ????</uses-permission> ??
- ????<uses-permission?android:name="android.permission.CHANGE_WIFI_STATE"?> ??
- ????</uses-permission> ??
- ????<uses-permission?android:name="android.permission.READ_PHONE_STATE"?> ??
- ????</uses-permission>??
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission>
有些版本中需要在mainfest中增加android权限、但我的就不需要增加;如果需要;可以试
试下面的代码;
- <com.baidu.mapapi.MapView ??
- ???????android:id="@+id/bmapView"??
- ???????android:layout_width="fill_parent"??
- ???????android:layout_height="fill_parent"??
- ???????android:clickable="true"?/>??
<com.baidu.mapapi.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
接着便是写主函数Activity的类了,其继承MapActivity的类、
先声明需要的对象:
- ????????BMapManager?mBMapMan=null;//地图管理者?? ??
- MapView?bMapView;//视图?? ??
- LocationListener?locationlistener;//位置动作监听器?? ??
- MyLocationOverlay?mLocationOverlay;//地图覆盖物???
BMapManager mBMapMan=null;//地图管理者 MapView bMapView;//视图 LocationListener locationlistener;//位置动作监听器 MyLocationOverlay mLocationOverlay;//地图覆盖物
然后,在主函数中创建百度地图的主对象;调用使用密钥参数的方法;接着初始化视图和找到空间视图。
- //创建百度地图管理者 ??
- ????????mBMapMan=new?BMapManager(getApplication()); ??
- ????????mBMapMan.init("22FCFCD052AAAE640F34D608D98CDED68B0744A5",null); ??
- //第一个参数就是你申请的key码 ??
- ????????super.initMapActivity(mBMapMan);//初始化百度地图? ??
- ????????bMapView=(MapView)findViewById(R.id.bmapView);//找到控件视图??
//创建百度地图管理者 mBMapMan=new BMapManager(getApplication()); mBMapMan.init("22FCFCD052AAAE640F34D608D98CDED68B0744A5",null);//第一个参数就是你申请的key码 super.initMapActivity(mBMapMan);//初始化百度地图 bMapView=(MapView)findViewById(R.id.bmapView);//找到控件视图
接着设置内置的缩放控件和控件视图的控制权;
- bMapView.setBuiltInZoomControls(true);//设置启动内置的缩放控件? ??
- ????????MapController?mMapController?=bMapView.getController();//得到bMapView的控制权,??
bMapView.setBuiltInZoomControls(true);//设置启动内置的缩放控件 MapController mMapController =bMapView.getController();//得到bMapView的控制权,
设置一个经纬度、然后将此坐标作为地图的中心位置;顺便还要设置地图的大小的级别。
- //给定一个经纬度构造一个GeoPoint?,单位是微度(度*1E6) ??
- ????????GeoPoint?point=new?GeoPoint?((int)(39.915*1E6),(int)(116.404*1E6));?? ??
- ????????mMapController.setCenter(point);//设置地图中心点 ??
- ????????mMapController.setZoom(12);//设置地图zoom级别 ??
- ????????//获取当前位置的覆盖物?? ??
- ????????mLocationOverlay=new?MyLocationOverlay(this,bMapView);?? ??
- ????????//添加定位覆盖物?? ??
- ????????bMapView.getOverlays().add(mLocationOverlay);???
//给定一个经纬度构造一个GeoPoint ,单位是微度(度*1E6) GeoPoint point=new GeoPoint ((int)(39.915*1E6),(int)(116.404*1E6)); mMapController.setCenter(point);//设置地图中心点 mMapController.setZoom(12);//设置地图zoom级别 //获取当前位置的覆盖物 mLocationOverlay=new MyLocationOverlay(this,bMapView); //添加定位覆盖物 bMapView.getOverlays().add(mLocationOverlay);
定义位置监听器、获取地图位置
- //定义位置监听器?? ??
- ????????locationlistener=new?LocationListener()?{?? ??
- ????????????public?void?onLocationChanged(Location?location)?{?? ??
- ????????????????//当位置改变时,获取当前经纬度?? ??
- ????????????????if?(location?!=?null){?? ??
- ???????????????????//获取位置经纬度?? ??
- ????????????????????GeoPoint?pt?=?new?GeoPoint((int)(location.getLatitude()*1e6),?? ??
- ???????????????????????????(int)(location.getLongitude()*1e6));?? ??
- ????????????????????//将视图中心定位到所在经纬度?? ??
- ????????????????????bMapView.getController().animateTo(pt);?? ??
- ????????????????}?? ??
- ???????????}?? ??
- ???????????? ??
- ????????};??
//定义位置监听器 locationlistener=new LocationListener() { public void onLocationChanged(Location location) { //当位置改变时,获取当前经纬度 if (location != null){ //获取位置经纬度 GeoPoint pt = new GeoPoint((int)(location.getLatitude()*1e6), (int)(location.getLongitude()*1e6)); //将视图中心定位到所在经纬度 bMapView.getController().animateTo(pt); } } };
根据管理者、更新地图位置
- protected?void?onResume(){?? ??
- ????????????//?获取位置管理者,视图根据位置监听更新位置?? ??
- ????????????mBMapMan.getLocationManager().requestLocationUpdates(locationlistener);?? ??
- ????????????//打开定位图标?? ??
- ???????????mLocationOverlay.enableMyLocation();?? ??
- ????????????//?打开指南针?? ??
- ????????????mLocationOverlay.enableCompass();?? ??
- ????????????//启动管理着?? ??
- ????????????mBMapMan.start();?? ??
- ????????????super.onResume();?? ??
- ???}??
protected void onResume(){ // 获取位置管理者,视图根据位置监听更新位置 mBMapMan.getLocationManager().requestLocationUpdates(locationlistener); //打开定位图标 mLocationOverlay.enableMyLocation(); // 打开指南针 mLocationOverlay.enableCompass(); //启动管理着 mBMapMan.start(); super.onResume(); }
这样、android百度地图就可以在手机上实现了。。。如果还有报错话、那就是主函数中要求添加一个判断方法;此方法不需要重写;其作用目前还不清楚。。。
由于文件上传有问题,所以这里提供下载的地址;
http://dev.baidu.com/wiki/imap/index.php?title=Android%E5%B9%B3%E5%8F%B0/%E7%9B%B8%E5%85%B3%E4%B8%8B%E8%BD%BD