W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫:penkzhou - 原文:http://developer.android.com/training/location/retrieve-current.html
使用Google Play services location APIs,我們的應(yīng)用可以請(qǐng)求獲得用戶設(shè)備的最后可知位置。大多數(shù)情況下,我們會(huì)對(duì)用戶的當(dāng)前位置比較感興趣。而通常用戶的當(dāng)前位置相當(dāng)于設(shè)備的最后可知位置。
特別地,使用fused location provider來獲取設(shè)備的最后可知位置。fused location provider是Google Play services location APIs中的一個(gè)。它處理基本定位技術(shù)并提供一個(gè)簡單的API,使得我們可以指定高水平的需求,如高精度或者低功耗。同時(shí)它優(yōu)化了設(shè)備的耗電情況。
這節(jié)課介紹如何通過使用fused location provider的getLastLocation())方法為設(shè)備的位置構(gòu)造一個(gè)單一請(qǐng)求。
為了訪問fused location provider,我們的應(yīng)用開發(fā)工程必須包括Google Play services。通過SDK Manager下載和安裝Google Play services組件,添加相關(guān)的庫到我們的工程。更詳細(xì)的介紹,請(qǐng)看Setting Up Google Play Services。
使用位置服務(wù)的應(yīng)用必須請(qǐng)求用戶位置權(quán)限。Android擁有兩種位置權(quán)限:ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION。我們選擇的權(quán)限決定API返回的位置信息的精度。如果我們選擇了ACCESS_COARSE_LOCATION,API返回的位置信息的精確度大體相當(dāng)于一個(gè)城市街區(qū)。
這節(jié)課只要求粗略的定位。在我們應(yīng)用的manifest文件中,用uses-permission
節(jié)點(diǎn)請(qǐng)求這個(gè)權(quán)限,如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android.gms.location.sample.basiclocationsample" >
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
</manifest>
為了連接到API,我們需要?jiǎng)?chuàng)建一個(gè)Google Play services API客戶端實(shí)例。關(guān)于使用這個(gè)客戶端的更詳細(xì)的介紹,請(qǐng)看Accessing Google APIs。
在我們的activity的onCreate())方法中,用GoogleApiClient.Builder創(chuàng)建一個(gè)Google API Client實(shí)例。使用這個(gè)builder添加LocationServices API。
實(shí)例應(yīng)用定義了一個(gè)buildGoogleApiClient()
方法,這個(gè)方法在activity的onCreate()方法中被調(diào)用。buildGoogleApiClient()
方法包括下面的代碼。
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
一旦我們將Google Play services和location services API連接完成后,我們就可以獲取用戶設(shè)備的最后可知位置。當(dāng)我們的應(yīng)用連接到這些服務(wù)之后,我們可以用fused location provider的getLastLocation())方法來獲取設(shè)備的位置。調(diào)用這個(gè)方法返回的定位精確度是由我們在應(yīng)用的manifest文件里添加的權(quán)限決定的,如本文的確定應(yīng)用的權(quán)限部分描述的內(nèi)容一樣。
為了請(qǐng)求最后可知位置,調(diào)用getLastLocation())方法,并將我們創(chuàng)建的GoogleApiClient對(duì)象的實(shí)例傳給該方法。在Google API Client提供的onConnected())回調(diào)函數(shù)里調(diào)用getLastLocation())方法,這個(gè)回調(diào)函數(shù)在client準(zhǔn)備好的時(shí)候被調(diào)用。下面的示例代碼說明了請(qǐng)求和一個(gè)對(duì)響應(yīng)簡單的處理:
public class MainActivity extends ActionBarActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
...
@Override
public void onConnected(Bundle connectionHint) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
}
}
}
getLastLocation())方法返回一個(gè)Location對(duì)象。通過Location對(duì)象,我們可以取得地理位置的經(jīng)度和緯度坐標(biāo)。在少數(shù)情況下,當(dāng)位置不可用時(shí),這個(gè)Location對(duì)象會(huì)返回null。
下一課,獲取位置更新,教你如何周期性地獲取位置信息更新。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: