Location Based Services - LBS 環境建置與行動定位
Outline 環境建置 建立LBS Project
Chapter1. 環境建置
環境建置 1.下載JDK安裝系統環境 JDK Click Download
環境建置 1.下載JDK安裝系統環境 點擊開啟下載連結
點擊Accept,選擇底下適合系統的安裝檔 環境建置 1.下載JDK安裝系統環境 點擊Accept,選擇底下適合系統的安裝檔 下載後並完成安裝
環境建置 2-1.下載開發環境IDE套件 ADT Bundle ADT Bundle 工具整合兩項工具 Android SDK (Android Development Tools) ADT Bundle ADT Bundle 工具整合兩項工具 Android SDK Eclipse IDE 在過去Android剛開始盛行的時候,需要自行整合Google Release的 Android SDK 還有 Eclipse,當初在建置開發環境時是相當耗時的,不久後Google推出了整合板的開發工具,也就是目前所看到的 ADT Bundle,它將開發Android 的SDK及相關套件與Eclipse整合在一起,讓開發者可以省去不少功夫。 Click Download
環境建置 2-1.下載開發環境IDE套件 下載ADT Bundle 並解壓縮
環境建置 2-2. ADT Bundle 整合工具簡介 Android SDK Android SDK 包括了開發 Android 手機應用程式所需的相關 Android APIs ( 又稱為 Framework APIs 或 Android SDK APIs ) 與核心工具 Android SDK提供許多Android的版本的API,供開發者選擇欲開發的版本,每個版本所採用的API的方法不盡相同,所以在建立專案時需要審慎評估 2014年Google統計市占率 2.3.x :21.2% 4.0.x :16.9% 4.1.x :35.9% 4.2.x :15.4% 4.3 :7.8% 4.4 :1.4%
環境建置 2-2. ADT Bundle 整合工具簡介 Eclipse IDE Eclipse 是由 Open Source Community 所創建的開發軟體,並被廣泛地使用在許多不同的領域。例如:可作為 Java 應用程式與 Android App 撰寫程式的開發環境 Eclipse 可以提供不同程式語言開發良好的整合環境與良好的擴充性(Plugin),比如說 Java,php,Android, C 等等,皆有透過Eclipse整合出一套適合的開發環境,讓開發者可以專注並快速開發程式。
環境建置 3-1. Eclipse 初始設定 點擊啟動Eclipse
環境建置 3-1. Eclipse 初始設定 預設Eclipse設定檔與專案的路徑
點擊Android SDK Manager,準備下載開發套件 環境建置 3-1. Eclipse 初始設定 1 2 點擊Android SDK Manager,準備下載開發套件
環境建置 3-1. Eclipse 初始設定 勾選上述套件並點擊Install安裝
選擇Accept License並點擊Install 環境建置 3-1. Eclipse 初始設定 選擇Accept License並點擊Install
點擊Install New Software 環境建置 3-2. Eclipse 相關套件安裝 1 2 點擊Install New Software
https://dl-ssl.google.com/android/eclipse/ 環境建置 3-2. Eclipse 相關套件安裝 1 點擊Add 3 2 輸入名稱與網址 https://dl-ssl.google.com/android/eclipse/ Next 4
環境建置 3-2. Eclipse 相關套件安裝 Accept 2 Next 1 3 Finish
Chapter2. 建立 LBS Project
點擊 Android Application Project 建立 LBS Project 1. 新增專案 3 1 2 點擊 Android Application Project
建立 LBS Project 1. 新增專案 輸入完成後,點擊Next Application 應用程式名稱 Project Name 在Eclipse中的專案目錄中的名稱 Package Name (以網域名方式命名) Minimum Required SDK 最低支援 Android SDK的版本 Target SDK 最高支援 Android SDK的版本 Compile With 選擇 Android SDK版本編譯 Theme 選擇 Android UI 風格 ※Compile 若有要開發 Google Maps 請選擇Google APIs 輸入完成後,點擊Next
專案建立在Eclipse的Workspace 建立 LBS Project 1. 新增專案 1 建立啟動圖示 建立Activity 2 專案建立在Eclipse的Workspace 3 輸入完成後,點擊Next 4
建立 LBS Project 1. 新增專案 點擊Next
建立 LBS Project 1. 新增專案 1 建立Activity 選擇模板(下一頁補充說明) 2 點擊Next 3
Scrollable Tabs +Swipe 建立 LBS Project 1. 新增專案-模板補充 BlankActivity None Fixed Tabs+Swipe Dropdown Scrollable Tabs +Swipe 在專案當中預設都使用None,其他的模板可依據需求選擇
建立 LBS Project 1. 新增專案-模板補充 Full Screen Activity Master/Detail Flow
建立 LBS Project 1. 新增專案 點擊Finish
建立 LBS Project 1. 新增專案 Project建立成功
建立 LBS Project 2. 專案目錄結構簡介 src/ gen/ 應用程式開發者所撰寫的 Java 程式碼之檔案目錄 此存放Eclipse IDE會自動依據專案資源建立的索引類別檔 (勿手動變更檔案內容)
建立 LBS Project 2. 專案目錄結構簡介 Google APIs Android Private Libaries Android Dependencies Android應用程式開發所需的類別函式庫
建立 LBS Project 2. 專案目錄結構簡介 assets/ bin/ 主要是用來存放應用程是使用到的一些不需要編譯處理的原始資料 用於存放需要打包到應用程式的靜態檔,以便部署到設備中, 例如HTML靜態資料或文字檔案或文字字型, 在/assets目錄下面不會在R.java里面自動產生ID,所以讀取assets目錄下面的資源文件需要提供路徑 bin: 存放Android 專案編譯過後所產生的相關檔案 bin/ 子檔案資料夾則為儲存Android手機應用程式輸出成執行檔的相關檔案
建立 LBS Project 2. 專案目錄結構簡介 libs/ res/ 主要放置 Android SDK 主要函式庫之外的第三方函式庫目錄 res/ 此目錄內容是Android應用程式使用到的所有資源,包含一些常用的子目錄,例: layout, drawable, values
建立 LBS Project 2. 專案目錄結構簡介 res/drawable-xxx/ res/layout/ res/values/ 不同尺寸的JPEG或PNG格式的圖形檔案,可以使用在高、中和低不同解析度的行動裝置螢幕 res/layout/ Drawable:因為每個Device都有不同的螢幕尺寸,因此若放置一張圖片要因應這種狀況,則需要在不同的dpi資料夾上放置相對應解析大小的圖,如此才不會讓圖片產生失真的問題。 Layout:在此定義所有User Interface的元件,例如TextView,Button等等..。 Value:有些String的內容可能會經常異動,若直接寫死在不同的程式碼內,爾後若有更改的需求,則必須從每個程式碼來調整,但若將文字定義於此,則可藉由索引ID的方式在程式碼內呼叫。因此若要更改文字即從定義的檔案更改一次即可。 定義使用介面版面配置的XML檔 res/values/ 定義程式使用的陣列、尺寸、色彩和樣式的常數值
建立 LBS Project 2. 專案目錄結構簡介 AndroidManifest.xml AndroidManifest.xml檔案是一個十分重要的檔案,它提供Android作業系統所有應用程式的基本資訊,權限資料以及其它與應用程式相關的屬性資料
建立 LBS Project 3. Android 定位 Android 有三種定位方式 人造衛星定位(GPS) 無線網路定位(Wi-Fi) 根據環繞地球的衛星訊號進行定點定位,不需網路連線,只要偵測到應該都很精準,但必須在戶外可以接收天空訊號處。 手機基地台定位 根據手機偵測到的附近電信基地台位置進行定位,但因為電信基地台之間距離較遠,所以計算出來的位置也會有比較大的誤差範圍。(偵測基地台本身不需網路連線,但要讀取基地台位置資料時就需要網路連線。) Wi-Fi 定位 根據手機偵測到的附近無線網路基地台位置進行定位,因為 Wi-Fi 基地台非常密集,所以定位相對準確。(偵測 Wi-Fi 基地台時不需進行 Wi-Fi 連線,但為了讀取基地台位置資料庫,你仍然需要有行動上網。)
建立 LBS Project 3-1. Android 定位效果 耗電量/啟動 GPS Wi-Fi 3G 低 普通 高 精準度/啟動 GPS 1.想要省電,也沒有精確定位需求:只要開啟行動網路,打開地圖一樣可以定位。 2.想要省電,但有精確定位需求:開啟行動網路、 Wi-Fi 偵測,打開地圖就能準確定位。 3.需要很精確的定位需求(或是開車時要衛星導航):開啟行動網路、開啟 Wi-Fi 偵測、開啟 GPS。 附註:這邊常常也有一個誤解:以為 Wi-Fi 定位必須連上 Wi-Fi,其實不然,你只需要「開啟偵測 Wi-Fi 基地台」即可,不需真的連上,就可以利用偵測的過程完成地點地位了。
建立 LBS Project 4. LBS Project 權限設定 點擊add新增啟用權限 打開AndroidManifest.xml 3 1 2
共Add三組Uses Permission 建立 LBS Project 4. LBS Project 權限設定 共Add三組Uses Permission 點擊Uses Permission
建立 LBS Project 4. LBS Project 權限設定 先點選要設定的選項 1 選擇要開啟的權限 2
建立 LBS Project 4. LBS Project 權限設定 共啟用三組權限 INTERNET 網路存取權限 ACCESS_FINE_LOCATION GPS定位權限 ACCESS_COARSE_LOCATION 無線網路定位
建立 LBS Project 5.Android LBS APIs LocationListener (Interface) abstract void onLocationChange (Location location) Called when the location has changed. onLocationChange: 監聽Provider位置有更動後,便執行此方法內的動作。 onProviderDisabled: 當手機的Provider被關閉後,便執行此方法內的動作。 abstract void onProviderDisabled (String provider) Called when the provider is disabled by the user.
建立 LBS Project 5.Android LBS APIs LocationListener (Interface) abstract void onProviderEnabled (String provider) Called when the provider is enabled by the user. onProviderEnabled : 當手機的Provider被啟用後,便執行此方法內的動作。 onStatusChanged : 當Provider的狀態發生變動(例如GPS從有訊號的狀態變成失去訊號的狀態) ,便會執行此方法內的動作。 abstract void onStatusChanged (String provider, int status, Bundle extras) Called when the provider status changes.
requestLocationUpdates 建立 LBS Project 5.Android LBS APIs LocationManager (Object) 無論是GPS或網路定位,我們都可以利用LocationManager輕易地幫使用者定位 More.. String getBestProvider (Criteria criteria, boolean enabledOnly) Returns the name of the provider that best meets the given criteria. getBestProvider : 取得在Criteria的條件下最佳的Provider,若沒有符合條件則會根據電力、精準度、方位、速度或高度來選擇提供者。 requestLocationUpdates: 此方法可設定時間間隔多久(ms) ,距離每隔多少(m) 更新使用者的位置,並透過啟用LocationListener來監聽反應。 在這邊僅舉兩種最普遍呼叫的方法,若想要更深入了解LocationManager另外有提供的API,則請參考More所連結到官方的詳細說明 String requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener) Register for location updates using the named provider, and a pending intent.
建立 LBS Project 6.建立第一支 HelloLBS 功能:擷取當前位置的經緯度
建立 LBS Project 6.建立第一支 HelloLBS 1 2 3 4 5 6 7 8 9 10 11 <FrameLayout> //FrameLayout底下新增 2 3 <TextView 4 android:id="@+id/textView1" 5 android:layout_width="wrap_content" 6 android:layout_height="wrap_content" 7 android:text="helloLBS" /> 8 //在FrameLayout區域內建立一個TextView 9 10 </FrameLayout> 11 打開activity_main.xml
建立 LBS Project 6.建立第一支 HelloLBS 1 2 3 4 5 6 7 打開MainActivity.java 8 9 import android.location.Criteria; 3 import android.location.Location; 4 import android.location.LocationListener; 5 import android.location.LocationManager; 6 //多import四個類別物件 7 8 public class MainActivity … //底下新增參數 9 private LocationManager lms; 10 private TextView textView1; 11 打開MainActivity.java
建立 LBS Project 6.建立第一支 HelloLBS 1 2 3 4 5 6 7 8 9 10 11 12 } private void locationServiceInitial() 2 { 3 lms = (LocationManager) getSystemService(LOCATION_SERVICE); 4 //取得系統定位服務 5 String bestProvider = lms.getBestProvider(new Criteria(), true); 6 //使用getBestProvider來取得最佳提供者,Default 取得精準度最高的GPS 7 lms.requestLocationUpdates(bestProvider, 1000, 1,new MyLocationListener()); 8 /* requestLocationUpdates parameter: 9 1. 定位方式 2. 時間間隔多久(ms)更新 10 3. 距離每隔多少(m)更新 4. 監聽器觸發的物件 (LocationListener ) 11 */ 12 }
建立 LBS Project 6.建立第一支 HelloLBS 1 2 3 4 5 6 7 8 9 10 11 12 private class MyLocationListener implements LocationListener { 2 @Override 3 public void onLocationChanged(Location location) { 4 //當地點改變時 5 textView1.setText(""+location.getLatitude()+","+location.getLongitude()); 6 //當地點改變時取得經緯度並且顯示在TextView上 7 } 8 9 public void onProviderDisabled(String arg0){ 10 //當GPS或網路定位功能關閉時 11 12
建立 LBS Project 6.建立第一支 HelloLBS 1 2 3 4 5 6 7 8 9 10 11 12 @Override public void onProviderEnabled(String arg0) { 3 //當GPS或網路定位功能開啟 4 } 5 6 public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 7 //定位狀態改變 8 9 10 11 12
建立 LBS Project 6.建立第一支 HelloLBS 1 2 { 3 4 5 6 7 8 9 10 11 12 protected void onCreate … //onCreate方法底下新增 2 { 3 4 //當GPS或網路定位功能開啟 5 textView1=(TextView)findViewById(R.id.textView1); 6 //將textView物件指定到textView1 7 locationServiceInitial(); 8 //呼叫剛才撰寫初始化的LBS服務 9 10 } 11 12
建立 LBS Project 7.執行程式 HelloLBS Android手機 Android模擬器
建立 LBS Project 7-1.手機執行程式 HelloLBS 事前準備 已啟動網路或GPS 準備原廠USB連接線 手機請先打開偵錯模式 確認電腦上已安裝手機的驅動 在手機上執行程式前須做四項檢查 1.要確認手機上網路或GPS是否已啟用 2.電腦要辨識手機,盡可能要準備原廠的USB連接線,否則可能發生USB裝置無法辨識之問題 3.手機要打開Development偵錯模式,才有辦法偵測到手機 4.電腦上必須要安裝有手機的驅動,若沒有驅動請至該手機廠牌的官方下載並安裝
建立 LBS Project 7-1.手機執行程式 HelloLBS 2 1
確認USB連接後是否處於Online狀態 建立 LBS Project 7-1.手機執行程式 HelloLBS 1 確認USB連接後是否處於Online狀態 2
建立 LBS Project 7-1.手機執行程式 HelloLBS 1 2 3
建立 LBS Project 7-1.手機執行程式 HelloLBS
建立 LBS Project 7-1.手機執行程式 HelloLBS 若執行出現此錯誤,請執行以下步驟 目前最新版本的Android ADT,在執行程式前可能會發生此錯誤,若有此錯誤訊息產生,請依照上述流程移除Android Dependencies 1 2 3
建立 LBS Project 7-2.模擬器執行程式 HelloLBS Android模擬器
建立 LBS Project 7-2.模擬器執行程式 HelloLBS 1 2
建立 LBS Project 7-2.模擬器執行程式 HelloLBS 1
建立 LBS Project 7-2.模擬器執行程式 HelloLBS
建立 LBS Project 7-2.模擬器執行程式 HelloLBS 1 2 3
建立 LBS Project 7-2.模擬器執行程式 HelloLBS 1 2 勾選所建立之模擬器 3
建立 LBS Project 7-2.模擬器執行程式 HelloLBS 輸入經緯度後,模擬送出定位狀態 1 2 輸入經緯度模擬GPS定位的位置 3 輸入經緯度後,模擬送出定位狀態
建立 LBS Project 7-3. HelloLBS 執行結果 模擬器執行結果 手機執行結果