編輯:關於Android編程
其實LocationManager,Geocoder這些Android API給我們提供的這些類就可以滿足了。下面筆者就來講講如何利用LocationManager獲取經緯度,並利用Geocoder將經緯度轉換為城市街道等信息。
LocationManager實例通過getSystemService()方式獲得
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);//1.通過GPS定位,較精確,也比較耗電 LocationProvider netProvider = locationManager.getProvider(LocationManager.NETWORK_PROVIDER);//2.通過網絡定位,對定位精度度不高或省點情況可考慮使用
if (locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null || locationManager.getProvider(LocationManager.GPS_PROVIDER) != null) { /* * 進行定位 * provider:用於定位的locationProvider字符串 * minTime:時間更新間隔,單位:ms * minDistance:位置刷新距離,單位:m * listener:用於定位更新的監聽者locationListener */ locationManager.requestLocationUpdates(provider, minTime, minDistance, listener); } else { //無法定位:1、提示用戶打開定位服務;2、跳轉到設置界面 Toast.makeText(this, 無法定位,請打開定位服務, Toast.LENGTH_SHORT).show(); Intent i = new Intent(); i.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(i); }當LocationProvider不為空null時,進行定位,當它為空時,提示用戶打開定位服務,在代碼中進行了跳轉,供用戶勾選。
在定位時,需要實現一個LocationListener位置監聽接口,主要是重寫onLocaiontChanged()方法
/** * 位置改變回調方法 * @param location 當前的位置 * @return void */ public void onLocationChanged(Location location){ //得到緯度 double latitude = location.getLatitude(); //得到經度 double longitude = location.getLongitude(); }
其他需要重寫的方法有:
@Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub }
Geocoder可用於將經緯度轉為詳細位置信息
Geocoder gc = new Geocoder(this, Locale.getDefault()); List locationList = null; try { locationList = gc.getFromLocation(latitude, longitude, 1); } catch (IOException e) { e.printStackTrace(); } Address address = locationList.get(0);//得到Address實例 //Log.i(TAG, address = + address); String countryName = address.getCountryName();//得到國家名稱,比如:中國 Log.i(TAG, countryName = + countryName); String locality = address.getLocality();//得到城市名稱,比如:北京市 Log.i(TAG, locality = + locality); for (int i = 0; address.getAddressLine(i) != null; i++) { String addressLine = address.getAddressLine(i);//得到周邊信息,包括街道等,i=0,得到街道名稱 Log.i(TAG, addressLine = + addressLine); }
最後,別忘記添加權限:
目錄:1.Dialog概述2.Dialog中的重要角色3.常見幾種類型的Dialog簡單使用3.1 提示型Dialog實現3.2 List型Dialog實現3.3 單選型
前幾天去參加了帶著自己的作品去參加服務外包大賽,因為簽位抽到的比較靠後就等待了蠻久,就跟坐在前面的一起參賽的選手開始討論Android的開發經驗,各自給對方展示了自己的作
做一個簡單的記錄。google搞了一大套 dip、sp、mdpi、hdpi、xhdpi之類的這些東西,簡單說來,就是為了讓我們輕松實現“與設備密度無關的視覺大
錯誤為:Android.mk文件c++的調用方法為:復制代碼 代碼如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
啟動AVD模擬器異常:Cannot set up guest memor