代碼以下: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(); }
瞭解更多技術文章,歡迎關注個人我的公衆號