編輯:關於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);
}
最後,別忘記添加權限:
Android Composite(Dialog)詳解
目錄:1.Dialog概述2.Dialog中的重要角色3.常見幾種類型的Dialog簡單使用3.1 提示型Dialog實現3.2 List型Dialog實現3.3 單選型
Android開發之程序員必須要懂得Android的重要設計理念
前幾天去參加了帶著自己的作品去參加服務外包大賽,因為簽位抽到的比較靠後就等待了蠻久,就跟坐在前面的一起參賽的選手開始討論Android的開發經驗,各自給對方展示了自己的作
Android開發 drawable 和 values 資源目錄在不同DPI下的加載順序
做一個簡單的記錄。google搞了一大套 dip、sp、mdpi、hdpi、xhdpi之類的這些東西,簡單說來,就是為了讓我們輕松實現“與設備密度無關的視覺大
c++ mk文件出錯Jni調用產生java.lang.UnsatisfiedLinkError錯誤解決方法
錯誤為:Android.mk文件c++的調用方法為:復制代碼 代碼如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
Android Studio初體驗之啟動AVD模擬器異常:cannot set up guest memory 'pc.ram'
啟動AVD模擬器異常:Cannot set up guest memor