久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Android GPS定位(wei)步(bu)驟

Android GPS定位(wei)步驟 時間(jian):2018-09-20      來源:未知

為確定設備所在(zai)位置(zhi),需要(yao)進行以下步驟的操作。

提供位置服務,需要獲得LocationManager對象(xiang)。使用LOCATION_SERVICE參數調(diao)用android.app.Activity.getSystemService()函數獲取一(yi)個LocationManager實例(li)。

android.app.Activity.getSystemService()函(han)數代碼如(ru)代碼所示(shi)。

getSystemService()
        //Context.LOCATION_SERVICE指明獲取的服務是位置服務
        String serviceString = Context.LOCATION_SERVICE;
        //根據服務名稱獲取Android提供的系統級服務
        LocationManagerLocationManager = 
        (LocationManager)getSystemService(serviceString);

這里(li)介(jie)紹(shao)一下Android支(zhi)持的(de)系(xi)統級(ji)服務有哪些,如表所示。

Android支持(chi)的系(xi)統級服務表

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

選擇LocationManager的定(ding)(ding)位方法。在獲取到LocationManager后(hou),還需要指定(ding)(ding)LocationManager的定(ding)(ding)位方法,然后(hou)才能夠(gou)調用LocationManager,LocationManager支持的定(ding)(ding)位方法有(you)以(yi)下兩種。

 GPS定位:可(ke)以提(ti)供更加精確的(de)位置(zhi)信息,但(dan)定位速度和質量受到(dao)衛(wei)星數(shu)量和環(huan)境情況(kuang)的(de)影響。

網絡定(ding)位:提(ti)供的位置信息精度差,但速度較GPS定(ding)位快。

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

LocationManager支持(chi)的定位方(fang)法比較

LocationManager類的靜態常量 說明
GPS_PROVIDER gps

 

使用GPS定位,利用衛星提供精確的位置信息,需要android.permissions.ACCESS_FINE_LOCATION用戶權限
NETWORK_PROVIDER network 使用網絡定位,利用基站或WiFi提供近似的位置信息,需要具有如下權限: 
android.permission.ACCESS_COARSE_LOCATION或android.permission.ACCESS_FINE_LOCATION.

在指定(ding)LocationManager的定(ding)位(wei)(wei)方法后,則可以調用getLastKnowLocation()方法獲取(qu)當前的位(wei)(wei)置(zhi)信息(xi)。

以(yi)使用GPS定(ding)位為例,獲取位置(zhi)信息的代(dai)碼(ma)(ma)如(ru)代(dai)碼(ma)(ma)清單(dan)所示。

代碼清單(dan)GPS定位獲取位置信(xin)息

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

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

代(dai)碼清單獲取經緯(wei)度信(xin)息

doublelat = location.getLatitude();
        doublelng = location.getLongitude();

實(shi)現(xian)LocationListener類。代碼如代碼清單所示。

代碼清單LocationListener

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

利用(yong)requestLocationUpdates()方法啟動位(wei)置信息的接(jie)收。

LocationManager提供(gong)了一種便捷(jie)、高效的(de)位(wei)置監(jian)視(shi)方法requestLocationUpdates(),可以根據位(wei)置的(de)距離變(bian)化(hua)和時間(jian)間(jian)隔設定產生位(wei)置改(gai)變(bian)事(shi)件的(de)條(tiao)件,這樣可以避免因微(wei)小的(de)距離變(bian)化(hua)而產生大量(liang)的(de)位(wei)置改(gai)變(bian)事(shi)件。

LocationManager中設定監聽位置(zhi)變化(hua)的(de)代(dai)碼如(ru)代(dai)碼清單所示。

代碼清單監聽(ting)位置變化

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

其中(zhong),第1個(ge)參數(shu)是定位(wei)(wei)的(de)(de)(de)方法,GPS定位(wei)(wei)或(huo)網絡(luo)定位(wei)(wei);第2個(ge)參數(shu)是產(chan)生位(wei)(wei)置(zhi)改(gai)(gai)變(bian)事(shi)(shi)件(jian)(jian)(jian)(jian)的(de)(de)(de)時(shi)間(jian)間(jian)隔,單位(wei)(wei)為(wei)微秒;第3個(ge)參數(shu)是距(ju)離(li)條(tiao)件(jian)(jian)(jian)(jian),單位(wei)(wei)是米;第4個(ge)參數(shu)是回調函數(shu),在滿足條(tiao)件(jian)(jian)(jian)(jian)后的(de)(de)(de)位(wei)(wei)置(zhi)改(gai)(gai)變(bian)事(shi)(shi)件(jian)(jian)(jian)(jian)的(de)(de)(de)處理函數(shu)。代碼將產(chan)生位(wei)(wei)置(zhi)改(gai)(gai)變(bian)事(shi)(shi)件(jian)(jian)(jian)(jian)的(de)(de)(de)條(tiao)件(jian)(jian)(jian)(jian)設定為(wei)距(ju)離(li)改(gai)(gai)變(bian)10米,時(shi)間(jian)間(jian)隔為(wei)2秒。

為了(le)使GPS定(ding)位功(gong)能生(sheng)效(xiao),還需要在AndroidManifest.xml文件中加入用(yong)戶(hu)許可(ke)。沒有這些權限,應用(yong)程(cheng)序在運行時是無法(fa)獲取到位置更(geng)新的。實現代(dai)碼如下所示:

代碼(ma)清單 AndroidManifest.xml

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

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

位(wei)置服務一般都需要使用(yong)設備(bei)上(shang)(shang)的(de)硬(ying)件,理想的(de)調試(shi)方(fang)式是將程序(xu)上(shang)(shang)傳(chuan)到物理設備(bei)上(shang)(shang)運行,但在沒有物理設備(bei)的(de)情況下,也可以使用(yong)Android模擬(ni)(ni)器提(ti)供的(de)虛(xu)擬(ni)(ni)方(fang)式模擬(ni)(ni)設備(bei)的(de)位(wei)置變(bian)化,調試(shi)具有位(wei)置服務的(de)應用(yong)程序(xu)。

首先打開(kai)DDMS中的(de)(de)(de)模(mo)擬器(qi)控制,在Location Controls中的(de)(de)(de)Longitude和Latitude部分輸入設(she)備當前的(de)(de)(de)經度和緯度,然后(hou)單擊(ji)“Send”按鈕(niu),就將虛擬的(de)(de)(de)位置信息(xi)發送(song)到Android模(mo)擬器(qi)中,如圖所示。

在程(cheng)序運行過程(cheng)中(zhong),可以在模擬器(qi)控制器(qi)中(zhong)改變經度(du)和緯度(du)坐標值,程(cheng)序在檢測(ce)到位(wei)置的(de)變化后(hou),會將(jiang)新的(de)位(wei)置信息顯示在界(jie)面上。

CurrentLocationDemo是一個提供位置(zhi)服務的基本(ben)示例,提供了顯(xian)示當前位置(zhi)新的功能(neng),并能(neng)夠監視設備的位置(zhi)變化(hua)。

CurrentLocationDemo示(shi)例中LocationBasedServiceDemo.java文件的(de)完整代(dai)碼如代(dai)碼清(qing)單所示(shi)。

代碼清單 LocationBasedServiceDemo.java

packagecn.com.farsight.LocationBasedServiceDemo;
        
        importandroid.app.Activity;
        importandroid.content.Context;
        importandroid.os.Bundle;
        importandroid.widget.TextView;
        importandroid.location.Location;
        importandroid.location.LocationListener;
        importandroid.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;
                        LocationManagerlocationManager = 
                         (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;
                        TextViewlocationText = (TextView)findViewById(R.id.txtshow);
                        if (location != null){
                                doublelat = location.getLatitude();
                                doublelng = location.getLongitude();
                                latLongInfo = "Lat: " + lat + "\nLong: " + lng;
                        }
                        else{
                                latLongInfo = "No location found";
                        }
                        locationText.setText(“Your Current Position is:\n" + latLongInfo);
                }
        
                private final LocationListenerlocationListener = 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) {
                        }
                };
    &nbsp;   }

上一篇:數組與指針專題

下一篇:基于FS4412的DS18B20溫度采集編程實現(1-時序分析)

熱(re)點文章(zhang)推(tui)薦
華清學員就業榜單
高(gao)薪學(xue)員經(jing)驗分享
熱點(dian)新(xin)聞推(tui)薦
前(qian)臺專線(xian):010-82525158 企(qi)業培訓洽談專線:010-82525379 院校合作(zuo)洽(qia)談(tan)專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部