97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠(yuǎn)見教育科技集團(tuán) >> 新聞動(dòng)態(tài) >> Android資料 >> Android開發(fā)之GPS定位  
 
Android開發(fā)之GPS定位
分享到:

為確定設(shè)備所在位置,需要進(jìn)行以下步驟的操作。

(1)提供位置服務(wù),需要獲得LocationManager對象。使用LOCATION_SERVICE參數(shù)調(diào)用android.app.Activity.getSystemService()函數(shù)獲取一個(gè)LocationManager實(shí)例。android.app.Activity.getSystemService()函數(shù)代碼如代碼清單1所示。

代碼清單1 getSystemService()


//Context.LOCATION_SERVICE指明獲取的服務(wù)是位置服務(wù)
    String serviceString = Context.LOCATION_SERVICE;

    //根據(jù)服務(wù)名稱獲取Android提供的系統(tǒng)級服務(wù)
    LocationManager LocationManager =
    (LocationManager)getSystemService(serviceString);

這里介紹一下Android支持的系統(tǒng)級服務(wù)有哪些,如表1所示。

表1 Android支持的系統(tǒng)級服務(wù)表

Context類的靜態(tài)常量 返回對象 說明
LOCATION_SERVICE location LocationManager 控制位置等設(shè)備的更新
WINDOW_SERVICE window WindowManager 頂層的窗口管理器
LAYOUT_INFLATER_SERVICE layout_inflater LayoutInflater 將XML資源實(shí)例化為View
POWER_SERVICE power PowerManager 電源管理
ALARM_SERVICE alarm AlarmManager 在指定時(shí)間接受Intent
NOTIFICATION_SERVICE notification NotificationManager 后臺(tái)事件通知
KEYGUARD_SERVICE keyguard KeyguardManager 鎖定或解鎖鍵盤
SEARCH_SERVICE search SearchManager 訪問系統(tǒng)的搜索服務(wù)
VIBRATOR_SERVICE vibrator Vibrator 訪問支持振動(dòng)的硬件
CONNECTIVITY_SERVICE connection ConnectivityManager 網(wǎng)絡(luò)連接管理
WIFI_SERVICE wifi WifiManager WiFi連接管理
INPUT_METHOD_SERVICE input_method InputMethodManager 輸入法管理

(2)選擇LocationManager的定位方法。在獲取到LocationManager后,還需要指定LocationManager的定位方法,然后才能夠調(diào)用LocationManager,LocationManager支持的定位方法有以下兩種。

□ GPS定位:可以提供更加精確的位置信息,但定位速度和質(zhì)量受到衛(wèi)星數(shù)量和環(huán)境情況的影響。
    □ 網(wǎng)絡(luò)定位:提供的位置信息精度差,但速度較GPS定位快。

LocationManager支持的定位方法比較,如表2所示。

表2 LocationManager支持的定位方法比較

LocationManager類的靜態(tài)常量 說明
GPS_PROVIDER gps 使用GPS定位,利用衛(wèi)星提供精確的位置信息,需要android.permissions.ACCESS_FINE_LOCATION用戶權(quán)限
NETWORK_PROVIDER network 使用網(wǎng)絡(luò)定位,利用基站或WiFi提供近似的位置信息,需要具有如下權(quán)限: android.permission.ACCESS_COARSE_LOCATION或android.permission.ACCESS_FINE_LOCATION.

在指定LocationManager的定位方法后,則可以調(diào)用getLastKnowLocation()方法獲取當(dāng)前的位置信息。

以使用GPS定位為例,獲取位置信息的代碼如代碼清單2所示。

代碼清單2 GPS定位獲取位置信息


String provider = LocationManager.GPS_PROVIDER;
    Location location = locationManager.getLastKnownLocation(provider);

在上述代碼中,第2行返回的Location對象中,包含了可以確定位置的信息,如經(jīng)度、緯度和速度等。然后通過調(diào)用Location中的getLatitude()和getLongitude()方法可以分別獲取位置信息中的緯度和經(jīng)度,示例代碼如代碼清單3所示。

代碼清單3 獲取經(jīng)緯度信息


double lat = location.getLatitude();
    double lng = location.getLongitude();

(3)實(shí)現(xiàn)LocationListener類。代碼如代碼清單4所示。

代碼清單4 LocationListener


LocationListener locationListener = new LocationListener(){
        //在設(shè)備的位置改變時(shí)被調(diào)用
        public void onLocationChanged(Location location) {
        }
        //在用戶禁用具有定位功能的硬件時(shí)被調(diào)用
        public void onProviderDisabled(String provider) {
        }
        //在用戶啟用具有定位功能的硬件時(shí)被調(diào)用
        public void onProviderEnabled(String provider) {
        }
        //在提供定位功能的硬件的狀態(tài)改變時(shí)被調(diào)用,如從不可獲取位置信息狀態(tài)到可以獲取位置信息的狀態(tài),反之亦然
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    };

(4)利用requestLocationUpdates()方法啟動(dòng)位置信息的接收。

LocationManager提供了一種便捷、高效的位置監(jiān)視方法requestLocationUpdates(),可以根據(jù)位置的距離變化和時(shí)間間隔設(shè)定產(chǎn)生位置改變事件的條件,這樣可以避免因微小的距離變化而產(chǎn)生大量的位置改變事件。

LocationManager中設(shè)定監(jiān)聽位置變化的代碼如代碼清單5示。

代碼清單5 監(jiān)聽位置變化


locationManager.requestLocationUpdates(provider, 2000, 10, locationListener);

其中,第1個(gè)參數(shù)是定位的方法,GPS定位或網(wǎng)絡(luò)定位;第2個(gè)參數(shù)是產(chǎn)生位置改變事件的時(shí)間間隔,單位為微秒;第3個(gè)參數(shù)是距離條件,單位是米;第4個(gè)參數(shù)是回調(diào)函數(shù),在滿足條件后的位置改變事件的處理函數(shù)。代碼將產(chǎn)生位置改變事件的條件設(shè)定為距離改變10米,時(shí)間間隔為2秒。

(5)為了使GPS定位功能生效,還需要在AndroidManifest.xml文件中加入用戶許可。沒有這些權(quán)限,應(yīng)用程序在運(yùn)行時(shí)是無法獲取到位置更新的。實(shí)現(xiàn)代碼如下所示:

代碼清單6 AndroidManifest.xml


<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

此處需注意,若使用GPS_PROVIDER,則使用ACCESS_FINE_LOCATION權(quán)限;若使用NETWORK_PROVIDER,則使用ACCESS_FINE_LOCATION和ACCESS_COARSE_ LOCATION權(quán)限。

位置服務(wù)一般都需要使用設(shè)備上的硬件,理想的調(diào)試方式是將程序上傳到物理設(shè)備上運(yùn)行,但在沒有物理設(shè)備的情況下,也可以使用Android模擬器提供的虛擬方式模擬設(shè)備的位置變化,調(diào)試具有位置服務(wù)的應(yīng)用程序。

首先打開DDMS中的模擬器控制,在Location Controls中的Longitude和Latitude部分輸入設(shè)備當(dāng)前的經(jīng)度和緯度,然后單擊“Send”按鈕,就將虛擬的位置信息發(fā)送到Android模擬器中,如圖1所示。

在程序運(yùn)行過程中,可以在模擬器控制器中改變經(jīng)度和緯度坐標(biāo)值,程序在檢測到位置的變化后,會(huì)將新的位置信息顯示在界面上。

CurrentLocationDemo是一個(gè)提供位置服務(wù)的基本示例,提供了顯示當(dāng)前位置新的功能,并能夠監(jiān)視設(shè)備的位置變化,如圖2所示。

   
圖1 Location Controls     圖2 CurrentLocationDemo示例圖

CurrentLocationDemo示例中LocationBasedServiceDemo.java文件的完整代碼如代碼清單9-7所示。

代碼清單7 LocationBasedServiceDemo.java


package cn.com.farsight.LocationBasedServiceDemo;

    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.widget.TextView;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;

    public class LocationBasedServiceDemo extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            String serviceString = Context.LOCATION_SERVICE;
            LocationManager locationManager =
            (LocationManager)getSystemService(serviceString);
            String provider = LocationManager.GPS_PROVIDER;
            Location location = locationManager.getLastKnownLocation(provider);
            getLocationInfo(location);
            locationManager.requestLocationUpdates(provider, 2000, 0, locationListener);
        }

        private void getLocationInfo(Location location){
            String latLongInfo;
            TextView locationText = (TextView)findViewById(R.id.txtshow);
            if (location != null){
                double lat = location.getLatitude();
                double lng = location.getLongitude();
                latLongInfo = "Lat: " + lat + "\nLong: " + lng;

            }
            else{
                latLongInfo = "No location found";
            }
            locationText.setText(“Your Current Position is:\n" + latLongInfo);
        }

        private final LocationListener locationListener = new LocationListener(){
            @Override
            public void onLocationChanged(Location location) {
                getLocationInfo(location);
            }
            @Override
            public void onProviderDisabled(String provider) {
                getLocationInfo(null);
            }
            @Override
            public void onProviderEnabled(String provider) {
                getLocationInfo(null);
            }
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
            }
        };
    }

 更多相關(guān)文章

·Android開發(fā)之Android Location API
·Android開發(fā)之Camera照相功能實(shí)現(xiàn)
·Android開發(fā)之音/視頻的錄制
·Android開發(fā)之MediaPlayer視頻播放實(shí)例
·Android開發(fā)之MediaPlayer音頻播放實(shí)例