Presentation is loading. Please wait.

Presentation is loading. Please wait.

實驗十五:標記目前位置.

Similar presentations


Presentation on theme: "實驗十五:標記目前位置."— Presentation transcript:

1 實驗十五:標記目前位置

2 實驗十五 主題 目的 環境需求 本實驗為練習使用在Google Map地圖上增加標記 學習如何使用在Google Map地圖上增加標示
Java SE Development Kit (JDK) Android SDK Google play services SDK Eclipse ADT 實體裝置 此範例在地圖上標記目前的位置,並移動地圖中心點到目前位置,標記不做清除,會依使用者位置不停在地圖上標示出目前位置,使用者點選地圖標記時會出現標記的經緯度

3 實驗十五範例

4 金鑰與環境建立 Step1.開通Google Maps Android服務與獲取金鑰,將google-play-services_lib專案匯入至工作區中並在專案中加入參考 Step2.在專案的AndroidManifest.xml檔案中加入相關使用權限 除地圖相關權限外,尚需額外增加定位的權限,如下: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

5 畫面佈局 Step3.將佈局檔預設相對佈局改為垂直線性佈局,並放入元件於佈局中
將佈局檔res/layout/activity_main.xml打開,先將TextView元件刪除,將根節點佈局改為垂直線性佈局LinearLayout(Vertical),將1個Fragment拖曳到概要視窗的垂直線性佈局中,Fragment代號為fragment1。 Step4. 打開Java程式,找出XML佈局中的地圖元件並註冊事件 將程式src/MainActivity.java打開,宣告一個GoogleMap物件googleMap變數,程式如src/MainActivity.java第2行。在onCreate()方法中的setContentView(R.layout.activity_main);下方,先利用GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);方法判斷Google Play Services在裝置中是否可使用,若不可使用,跳出對話視窗顯示錯誤原因 若可使用,利用FragmentManager類別中的getFragmentManager()方法取得FragmentManager物件,再利用其findFragmentById()方法找出MapFragment物件,最後利用MapFragment的getMap()方法取出GoogleMap物件。設定GoogleMap的setMyLocationEnabled(true)方法,將目前定位圖層打開,註冊GoogleMap的onMyLocationChange事件

6 src/MainActivity.Java Step5.實作onMyLocationChange()方法內容
當使用者位置改變時,此時程式會跳去執行onMyLocationChange()方法,從location參數可知目前座標位置,利用location的getLatitude()和getLongitude()方法取得經緯度,並依據此經緯度產生LatLng物件,利用CameraUpdateFactory的newLatLng()方法,產生CameraUpdate物件,並呼叫GoogleMap類別的animateCamera()方法將地圖中心點移至目前座標位置。利用MarkerOptions的相關方法設定標記的位置、圖示、資訊視窗的標題和內容,最後利用GoogleMap類別的addMarker ()方法將標記加入地圖上 Step6.實作onCancel()方法內容 若Google Play Services在裝置中不可使用,會跳出對話視窗,對話視窗消失時,會執行onCancel()方法,呼叫Activity類別中的finish()方法,關閉視窗應用程式

7 protected void onCreate(Bundle savedInstanceState) {
public class MainActivity extends Activity implements OnCancelListener, OnMyLocationChangeListener { GoogleMap googleMap; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int errorCode=GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if(errorCode!=ConnectionResult.SUCCESS) GooglePlayServicesUtil.showErrorDialogFragment(errorCode,this,2,this); else{ MapFragment frag=(MapFragment) getFragmentManager().findFragmentById(R.id.fragment1); googleMap=frag.getMap(); googleMap.setMyLocationEnabled(true);//開啟目前位置圖層 googleMap.setOnMyLocationChangeListener(this);//註冊位置改變事件 } public void onMyLocationChange(Location location) { LatLng latLng=new LatLng(location.getLatitude(), location.getLongitude()); CameraUpdate update=CameraUpdateFactory.newLatLng(latLng); googleMap.animateCamera(update);//移動地圖中心點到目前位置 MarkerOptions options=new MarkerOptions();//產生標記 options.position(latLng); options.title("標記"); options.snippet(latLng.toString()); BitmapDescriptor bitmapdsr=BitmapDescriptorFactory.defaultMarker( BitmapDescriptorFactory.HUE_GREEN); options.icon(bitmapdsr); Marker marker=googleMap.addMarker(options);//加入標記 Toast.makeText(this, "目前位置改變", Toast.LENGTH_LONG).show(); public void onCancel(DialogInterface arg0) { finish(); Note:若在模擬器(需Google APIs 4.2以上)上執行,透過Emulator Control發送GPS位置資訊到模擬器中,需將模擬器的設定(Settings)定位(Location)模式(Mode)改為高精確度(High Accuracy)


Download ppt "實驗十五:標記目前位置."

Similar presentations


Ads by Google