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