2012年12月21日 星期五

Android程式設計 - 使用Google Map V3 (1) 基本架構

Google自2012.12.3起聲明不支援Map API V1,即不再增加新功能,到2013.3.3前仍接受申請Map API V1 key。Map API V2改用com.google.android.gms.maps.MapFragment,仍需申請Map API V2 key;Google Map API V3則改為Javascript API方式,使用WebView來顯示Google Map,應用程式不需再申請Google Map API key,但同一頁面免費存取次數為25000次/天。

1. 編輯一個HTML檔(例如: googleMap.html),並放置到asset目錄。在html檔中置入一個<div>標籤,大小為全螢幕,用來顯示Google Map。
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<script type="text/javascript" 
        src="http://maps.google.com/maps/api/js?sensor=true"></script>
<script type="text/javascript">
  function initialize() {
    var myLatlng = new google.maps.LatLng(23.937591,120.700807);  //地圖中心點
    var myOptions = {
           zoom: 17,
           center: myLatlng,
           mapTypeId: google.maps.MapTypeId.ROADMAP               //道路地圖
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  }
</script>
</head>
<body style="margin:0px; padding:0px;" onload="initialize()">
  <div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>

2. 在版面配置中加入一個WebView元件
<RelativeLayout ...>
  <WebView android:id="@+id/webview"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"/>
</RelativeLayout>

3. 撰寫MainActivity程式,設定WebView啟用JavaScript功能,之後載入googleMap.html。
public class MainActivity extends Activity{
    private static final String MAP_URL = "file:///android_asset/googleMap.html";
    private WebView webView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupWebView();
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }   
    private void setupWebView(){
        webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);       
        webView.loadUrl(MAP_URL);  
    }
}