特別聲明:以下所有操作都別忘記了加上許可權:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
sp;
LocationManager
通過LocationManager可以實現裝置的定位、跟蹤和趨近提示。它不需要你直接來執行個體化,我們可以通過Context.getSystemService(Context.LOCATION_SERVICE). 來獲得LocationManager執行個體。
常用屬性和方法
| 屬性和方法 |
描述 |
| GPS_PROVIDER |
靜態字串常量,表明LocationProvider是GPS |
| NETWORK_PROVIDER |
靜態字串常量,表明LocationProvider是網路 |
| addGpsStatusListener(GpsStatus.Listener listener) |
添加一個GPS狀態監聽器 |
| addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent) |
添加一個趨近警告 |
| getAllProviders() |
獲得所有的LocationProvider列表 |
| getBestProvider(Criteria criteria, boolean enabledOnly) |
根據Criteria返回最適合的LocationProvider |
| getLastKnownLocation(String provider) |
根據Provider獲得位置資訊 |
| getProvider(String name) |
獲得指定名稱的LocationProvider |
| getProvider(boolean enableOnly) |
獲得可利用的LocationProvider列表 |
| removeProximityAlert(PendingIntent intent) |
刪除趨近警告 |
| requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent) |
通過給定的Provider名稱,周期性地通知當前Activity |
| requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) |
通過給定的Provider名稱,並將其綁定指定的LocationListener監聽器 |
| |
|
LocationProvider
LocationProvider用來描述位置提供者,設定位置提供者的一些屬性。可以通過Criteria類來為LocationProvider設定條件,獲得合適的LocationProvider。
| 屬性或者方法名稱 |
描述 |
| AVAILABLE |
靜態整型常量,標示是否可利用 |
| OUT_OF_SERVICE |
靜態整型常量,不在服務區 |
| TEMPORAILY_UNAVAILABLE |
靜態整型常量,臨時不可利用 |
| getAccuarcy() |
獲得精度 |
| getName() |
獲得名稱 |
| getPowerRequirement() |
獲得電源需求 |
| hasMonetaryCost() |
花錢的還是免費的 |
| requiresCell() |
是否需要訪問基站網路 |
| requiresNetWork() |
是否需要Intent網路資料 |
| requiresSatelite() |
是否需要訪問衛星 |
| supportsAltitude() |
是否能夠提供高度資訊 |
| supportsBearing() |
是否能夠提供方向資訊 |
| supportsSpeed() |
是否能夠提供速度資訊 |
執行個體:擷取裝置上的所有的LocationProviders
locationManager=(LocationManager)LocationManagerDemoActivity.this.getSystemService(Context.LOCATION_SERVICE);
//擷取所有的LocationProvider
List<String> allproviders=locationManager.getAllProviders();
for (String string : allproviders) {
System.out.println(string);
}
Location類
它用於描述當前裝置的地理位置資訊,包括了經緯度、方向、高度和速度等。可以通過LocationManager.getLastKnownLocation(String provider)方法可以獲得Location執行個體
其常見方法和屬性:
| 方法 |
描述 |
| public float getAccuracy () |
獲得精確度 |
| public double getAltitude () |
獲得高度 |
| public float getBearing () |
獲得方向 |
| public double getLatitude () |
擷取經度 |
| public double getLongitude () |
獲得緯度 |
| public float getSpeed () |
獲得速度 |
執行個體:得到你自己的位置
// 擷取自己的位置
btnGetPosition.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("擷取當前位置");
locationManager = (LocationManager) LocationManagerDemoActivity.this
.getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
System.out.println("你當前的位置:"); www.2cto.com
StringBuilder sb=new StringBuilder("你當前的位置(經緯度):");
sb.append("(");
sb.append(location.getLatitude());
sb.append(",");
sb.append(location.getLongitude());
sb.append(")");
System.out.println(location.getLatitude());
System.out.println(location.getLongitude());
txtPostion.setText(sb);
}
});
// 擷取自己的位置
btnGetPosition.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("擷取當前位置");
locationManager = (LocationManager) LocationManagerDemoActivity.this
.getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
System.out.println("你當前的位置:");
StringBuilder sb=new StringBuilder("你當前的位置(經緯度):");
sb.append("(");
sb.append(location.getLatitude());
sb.append(",");
sb.append(location.getLongitude());
sb.append(")");
System.out.println(location.getLatitude());
System.out.println(location.getLongitude());
txtPostion.setText(sb);
}
});
執行個體:追蹤位置:
requestLocationUpdates(String provider,long minTime,float minDistance,LocationListener listener)
關於參數minTime,minDistance的說明是指當使用者位置改變多少緯度時候多長時間更新下這個使用者的位置
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 500, 500, new listener());
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 500, 500, new listener());
執行個體:擷取最好的LocationProivider
LocationManager.getBasetProvider(Criteria criteria,boolean is)
LocationManager.getBasetProvider(Criteria criteria,boolean is)
Criteria類
它封裝了用於獲得LocationProvider的條件,可以根據指定的Criteria條件來過濾獲得LocationProvider
及常用屬性和方法如下:
| 屬性或訪求名稱 |
描述 |
| ACCERACY_COARSE |
粗糙精確度 |
| ACCURACY_FINE |
較高精確度 |
| POWER_HING |
用電高 |
| POWER_LOW |
用電低 |
| isAlititudeRequried() |
返回Provider是否需要高度資訊 |
| isBearingRequired() |
返回Provider是否需要方位資訊 |
| isSpeedRequried() |
返回Provider是否需要速度資訊 |
| isCostAllowed() |
是否允許產生費用 |
| setAccuracy(int accuracy) |
設定Provider的精確度 |
| setAltitudeRequired (boolean altitudeRequired) |
設定Provider是否需要高度資訊 |
| setBearingRequired (boolean bearingRequired) |
設定Provider是否需要方位資訊 |
| setCostAllowed (boolean costAllowed) |
設定Provider是否產生費用 |
| setSpeedAccuracy (int accuracy) |
設定Provider是否需要速度資訊 |
| getAccuracy() |
獲得精度 |
// 擷取最佳的Provider
btnBestProvider.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String bestProviders = "";
locationManager = (LocationManager) LocationManagerDemoActivity.this
.getSystemService(Context.LOCATION_SERVICE);
// 建立一個Criteria
Criteria criteria = new Criteria();
// 設定精確度
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(false);
// 獲得合格provider
bestProviders = locationManager
.getBestProvider(criteria, false);
txtCrerita.setText("最佳的provider:"+bestProviders);
}
});
// 擷取最佳的Provider
btnBestProvider.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String bestProviders = "";
locationManager = (LocationManager) LocationManagerDemoActivity.this
.getSystemService(Context.LOCATION_SERVICE);
// 建立一個Criteria
Criteria criteria = new Criteria();
// 設定精確度
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(false);
// 獲得合格provider
bestProviders = locationManager
.getBestProvider(criteria, false);
txtCrerita.setText("最佳的provider:"+bestProviders);
}
}); www.2cto.com
總結(再看GPS):
從以上知識我們可以知道,要想使用Android平台下的GPS服務我們就得用LocationManager這個系統服務,我們可以通過Context.getSystemService(Context.LOCATION_SERVIER)來得到這個LocationManager對象執行個體,有了這麼一個服務後,我們可以通過LocationProvider來描述位置提供者,為了某種需要我們又用到了一個Criteria類來設定滿足我們自己的最佳要求,那麼這一切都搞定的時候,擷取我們自己所在的位置我們就用到了Location類,這個類用來擷取我們自己的位置,例如:經緯度。
摘自 jiahui524專欄