Android的定位服务与座标课件.ppt
《Android的定位服务与座标课件.ppt》由会员分享,可在线阅读,更多相关《Android的定位服务与座标课件.ppt(84页珍藏版)》请在三一办公上搜索。
1、第14章 Google地圖與定位服務,14-1 定位服務-我在哪裡 14-2 地圖解碼服務-找出景點座標 14-3 本地服務與定位應用-GPS景點防撞雷達 14-4 使用Google Maps API-My地圖 14-5 標記Google地圖-追蹤個人行蹤,14-1 定位服務-我在哪裡,14-1-1 Android的定位服務與座標 14-1-2 使用定位服務-我在哪裡,14-1-1 Android的定位服務與座標-說明,Android行動裝置結合定位功能和Google地圖建立的位置感知服務(Location-based Service,LBS),這是一項十分實用的功能,LBS應用程式可以追蹤你
2、的位置和提供一些額外服務,例如:找出附近的咖啡廳、停車場、自動櫃員機或加油站等。Android作業系統提供LocationManager類別的定位服務來幫助我們存取行動裝置目前的定位資料,包含:緯度(Latitude)、經度(Longitude)和高度(Altitude)等。,14-1-1 Android的定位服務與座標-種類,GPS定位提供者:提供者名稱字串為gps,它是使用GPS(Global Positioning System)的衛星訊號來定位,可以提供精確的位置資訊,但是無法收到衛星訊號的室內並無法使用。網路定位提供者;提供者名稱字串為network,它是直接使用電信公司基地台來執行
3、三角定位,其提供的位置資訊較不精確,但是可以在室內使用。,14-1-1 Android的定位服務與座標-座標,定位服務最主要的目的是找出行動裝置目前位置的經緯度座標,經緯度是經度與緯度合稱的座標系統,也稱為地理座標系統,它是使用三度空間的球面來定義地球表面各點的座標系統,能夠標示地球表面上的任何一個位置。經度與緯度的說明,如下所示:緯度:地球表面某一點距離地球赤道以南或以北的度數,其值為0至90度,赤道以北的緯度叫北緯(符號為N);赤道以南的緯度稱南緯(符號為S)。經度:地球表面上某一點距離本初子午線(一條南北方向經過倫敦格林威治天文台舊址的子午線)以東或以西的度數,簡單的說,本初子午線的經度
4、是0度,其他地點的經度是向東從0到180度,即東經(符號為W)或向西從0到180度,即西經(符號為E)。,14-1-2 使用定位服務-我在哪裡(說明),我在哪裡是定位服務的最簡單應用,可以顯示目前行動裝置的經緯度座標。,14-1-2 使用定位服務-我在哪裡步驟一:開啟和執行Android Studio專案,請啟動Android Studio開啟專案Ch14_1_2,內含1個Java類別檔和版面配置檔activity_main.xml。執行可以看到程式顯示目前的位置座標,按【顯示Google地圖】鈕,可以啟動Google地圖顯示此座標附近的地圖,即台北火車站,如下圖所示:,14-1-2 使用定位
5、服務-我在哪裡步驟二:建立我在哪裡使用介面的版面配置,使用介面的版面配置是定義在activity_main.xml檔,垂直編排1個TextView和Button元件,如下圖所示:,14-1-2 使用定位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-1,在MainActivity活動類別的開頭宣告成員的LocationManager和Location物件變數,如下所示:public class MainActivity extends AppCompatActivity private static final int PERMISSIONS_REQUEST_ACCESS_FI
6、NE_LOCATION=101;private LocationManager manager;private Location currentLocation;private String best;.,14-1-2 使用定位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-2,onCreate()方法在覆寫onCreate()方法載入版面配置後,呼叫getSystemService()方法取得系統服務LocationManager物件,if條件判斷是否啟用GPS,如下所示:Overridepublic void onCreate(Bundle savedInstanceSta
7、te)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);manager=(LocationManager)getSystemService(LOCATION_SERVICE);if(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER),14-1-2 使用定位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-3,if條件呼叫LocationManager物件的isProviderEnabled()方法檢查是否啟用GPS,沒有,
8、就顯示對話方塊要求啟用GPS,如下所示:AlertDialog.Builder builder=new AlertDialog.Builder(this);builder.setTitle(定位管理).setMessage(GPS目前狀態是尚未啟用.n+請問你是否現在就設定啟用GPS?).setPositiveButton(啟用,new DialogInterface.OnClickListener()Override public void onClick(DialogInterface dialog,int which)Intent i=new Intent(Settings.ACTION
9、_LOCATION_SOURCE_SETTINGS);startActivity(i);).setNegativeButton(不啟用,null).create().show();,14-1-2 使用定位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-4,if(Build.VERSION.SDK_INT=Build.VERSION_CODES.M,14-1-2 使用定位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-5,onResume()方法在覆寫onResume()方法建立Criteria物件設定如何選擇提供者,以便取得最佳或符合你需求的定位提供者,然後就可
10、以呼叫getrBestProvider()方法取得最佳提供者字串,參數是Criteria物件,如下所示:Overrideprotected void onResume()super.onResume();Criteria criteria=new Criteria();best=manager.getBestProvider(criteria,true);int minTime=5000;/毫秒 float minDistance=5;/公尺 if(best!=null)currentLocation=manager.getLastKnownLocation(best);,14-1-2 使用定
11、位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-6,manager.requestLocationUpdates(best,minTime,minDistance,listener);else currentLocation=manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,minTime,minDistance,listener);updatePosition();,14-1-2 使用定位
12、服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-7,onPause()方法在覆寫onPause()方法呼叫removeUpdates()方法取消周期更新位置,如下所示:Overrideprotected void onPause()super.onPause();try manager.removeUpdates(listener);catch(SecurityException sex)Log.e(Ch14_1_2,GPS權限失敗.+sex.getMessage();,14-1-2 使用定位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-8,updatePos
13、ition()方法在自訂updatePosition()方法更新TextView元件顯示的位置資訊,如下所示:private void updatePosition()TextView output;output=(TextView)findViewById(R.id.output);if(currentLocation=null)output.setText(取得定位資訊中.);else output.setText(getLocationInfo(currentLocation);,14-1-2 使用定位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-9,LocationL
14、istener傾聽者物件使用匿名內層類別實作LocationListener介面來建立此物件,需要實作4個方法,如下所示:private LocationListener listener=new LocationListener()Override public void onLocationChanged(Location location)currentLocation=location;updatePosition();Override public void onProviderDisabled(String provider)Override public void onProvi
15、derEnabled(String provider)Override public void onStatusChanged(String provider,int status,Bundle extras);,14-1-2 使用定位服務-我在哪裡步驟三:建立Activity活動類別使用定位服務-10,getLocationInfo()方法在自訂的getLocationInfo()方法可以從參數Loaction物件取得定位資訊,如下所示:public String getLocationInfo(Location location)StringBuffer str=new StringBuf
16、fer();str.append(定位提供者(Provider):+location.getProvider();str.append(n緯度(Latitude):+Double.toString(location.getLatitude();str.append(n經度(Longitude):+Double.toString(location.getLongitude();str.append(n高度(Altitude):+Double.toString(location.getAltitude();return str.toString();,14-1-2 使用定位服務-我在哪裡步驟三:建
17、立Activity活動類別使用定位服務-11,button_Click()事件處理方法button_Click()事件處理方法可以依據目前的位置座標來啟動Google地圖,它是使用Intent物件啟動Google地圖程式,首先取得經緯度座標longitude和latitude,如下所示:public void button_Click(View view)float latitude=(float)currentLocation.getLatitude();float longitude=(float)currentLocation.getLongitude();String uri=Stri
18、ng.format(geo:%f,%f?z=18,latitude,longitude);Intent geoMap=new Intent(Intent.ACTION_VIEW,Uri.parse(uri);startActivity(geoMap);,14-1-2 使用定位服務-我在哪裡步驟四:在AndroidManifest.xml新增權限,因為需要使用定位服務,所以在AndroidManifest.xml檔新增2個權限,ACCESS_COURSE_LOCATION是網路定位服務,ACCESS_FINE_LOCATION是GPS定位服務,如下所示:,14-2 地圖解碼服務-找出景點座標(說
19、明),地圖解碼服務(Geocoding Services)可以從位置名稱、郵遞區號等資訊來找出經緯度座標,或反過來,從經緯度座標找出位置名稱或地址。Android是使用Geocoder類別來處理座標轉換,相關方法的說明,如下表所示:,14-2 地圖解碼服務-找出景點座標步驟一:開啟和執行Android Studio專案,請啟動Android Studio開啟專案Ch14_2,內含1個Java類別檔和版面配置檔activity_main.xml,其執行結果如下圖所示:,14-2 地圖解碼服務-找出景點座標步驟二:建立找出景點座標使用介面的版面配置,找出景點座標的使用介面是定義在activity_
20、main.xml檔,內含多個TextView、EditText元件和Button元件,如下圖所示:,14-2 地圖解碼服務-找出景點座標步驟三:建立Activity活動類別找出景點座標-1,在MainActivity活動類別的開頭宣告成員的ArrayAdapter和Geocoder等物件變數,如下所示:public class MainActivity extends AppCompatActivity private final int maxResult=3;private String addressList=new StringmaxResult;private ArrayAdapte
21、r adapter;private TextView output;private Geocoder geocoder;private EditText lat,lon;,14-2 地圖解碼服務-找出景點座標步驟三:建立Activity活動類別找出景點座標-2,onCreate()方法在覆寫的onCreate()方法載入版面配置後,可以取得EditText物件來取得輸入座標,如下所示:Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R
22、.layout.activity_main);lat=(EditText)findViewById(R.id.txtLat);lon=(EditText)findViewById(R.id.txtLong);output=(TextView)findViewById(R.id.output);geocoder=new Geocoder(this,Locale.TAIWAN);,14-2 地圖解碼服務-找出景點座標步驟三:建立Activity活動類別找出景點座標-3,button_Click()事件處理方法在button_Click()事件處理方法將經緯度座標轉換成地址,首先將經緯度的輸入字串轉
23、換成float浮點數,如下所示:public void button_Click(View view)float latitude=Float.parseFloat(lat.getText().toString();float longitude=Float.parseFloat(lon.getText().toString();try List listAddress=geocoder.getFromLocation(latitude,longitude,maxResult);程式碼呼叫Geocoder物件的getFromLocation()方法取得地址清單的List物件,參數依序是緯度、經
24、度和最多傳回的地址數。,14-2 地圖解碼服務-找出景點座標步驟三:建立Activity活動類別找出景點座標-4,如果有傳回地址,就在下方if條件的程式區塊建立ArrayAdapter結合器物件,然後顯示在Spinner元件,如下所示:if(listAddress!=null)Spinner spinner=(Spinner)findViewById(R.id.addresslist);for(int j=0;j 0)addressListindex+=strAddress.toString();,14-2 地圖解碼服務-找出景點座標步驟三:建立Activity活動類別找出景點座標-5,在建立
25、addressList陣列後,可以將此陣列建立成ArrayAdapter結合器物件,如下所示:adapter=new ArrayAdapter(this,android.R.layout.simple_spinner_item,addressList);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter);else output.setText(注意:沒有傳回地址資料!);catch(Exception ex)output.setTex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 定位 服务 座标 课件
链接地址:https://www.31ppt.com/p-3858212.html