實驗十四:顯示與控制地圖.

Slides:



Advertisements
Similar presentations
开发入门 一个 android 初学者的心得与体会. 前言 两周前张老师通知我说,让我根据教练助手的学习与开发的过程讲下 android 开发的心得与体会,我觉得自己在这么多 Android 前辈大佬面前讲 android 简 直是班门弄斧。由于是刚入门的初学者,水平有限,很多方面还很不足,对 错误或不周到之处欢迎批评指正。顺便还得提下,我这个标题有抄袭积聚童.
Advertisements

Android ADT + Android SDK Eclipse Eclipse 編輯器 JAVA JAVA 開發工具.
第2章  Android应用的界面编程.
第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
四資二甲 第三週作業 物件導向程式設計.
Android环境搭建 倚动软件工厂实验室 网络课程地址:
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
第二章 B4A程式語言的開發環境 課程名稱:程式設計 授課老師:李春雄 博士
Android + Web Service 建國科技大學 資管系 饒瑞佶 2017/3 V1.
ArrayAdapter & Spinner
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
使用Android Studio 開發Android App 靜宜大學資管系 楊子青
建立Android新專案 建國科技大學 資管系 饒瑞佶 2010/10.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
實驗四:單位轉換程式.
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
第7章 Android文件与本地数据库(SQLite)
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
實驗十三:顯示目前經緯度位置.
Ch06 再談選單元件 物件導向系統實務.
使用Android控制Arduino 史先强
Android開發環境建置與設定 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第10章 App微信分享的实现 倚动实验室.
安裝與設置 Android 發展環境 靜宜大學資工系 蔡奇偉副教授 ©.
Android資料庫處理 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第9章 位置服务与地图应用.
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
Chapter 6 Advanced UI Design.
Android智慧型手機程式設計實務應用班
Ch5 Android應用程式的主要組成.
Chapter 7 Android應用元件 Android應用元件可以幫助我們獲得系統資源訊息(ActivityManager)、提供系統服務(Service)、搜尋系統服務(SearchManager)、監聽Intent訊息(Broadcast Receiver)以及資料共享(ContentProvider和ContentResolver)。
Android介面設計 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
Android Intent 建國科技大學 資管系 饒瑞佶 2011/1.
Chapter 6 進階UI設計.
第9章 使用意圖啟動活動與內建應用程式 9-1 意圖的基礎 9-2 使用意圖啟動活動
CH7 佈局、按鈕與文字編輯元件.
Android + Service 建國科技大學 資管系 饒瑞佶.
Android 基礎.
Android開發環境建置與設定 建國科技大學 資管系 饒瑞佶 2010/10.
第2讲 移动应用开发基础知识(二) 宋婕
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第6章 建立Android使用介面 6-1 介面元件的基礎 6-2 Android的事件處理 6-3 按鈕元件 6-4 文字元件
建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2 2013/2 V3 2014/9 V4
C/C++/Java 哪些值不是头等程序对象
實驗十一:待辦事項程式 (儲存在手機上).
主编:钟元生 赵圣鲁.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
實驗十五:標記目前位置.
網路應用.
ArrayAdapter & Spinner
Chapter 5 Basic UI Design.
主编:钟元生 赵圣鲁.
實驗九:延續實驗八, 製作一個完整音樂播放器
課程網站
Location Based Services - LBS
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
第二章 Java语法基础.
實驗十六:匯出APK安裝檔與軟體上架.
第二章 Java基本语法 讲师:复凡.
RecyclerView and CardView
實驗十:影片播放.
Android Speech To Text(STT)
用Intent啟動程式中的其他Activity、運用WebView顯示網頁 靜宜大學資管系 楊子青
第2章 Java语言基础.
Part 8 Broadcast Receiver、Service和App Widget
進階UI元件:Spinner與接合器 靜宜大學資管系 楊子青
Presentation transcript:

實驗十四:顯示與控制地圖

實驗十四 主題 目的 環境需求 本實驗為練習使用Google Map地圖 取得Google Map地圖不同模式的顯示方式和控制縮放大小 Java SE Development Kit (JDK) Android SDK Google play services SDK Eclipse ADT 實體裝置 本實驗為練習使用Google Map地圖不同模式的顯示方式和控制縮放大小。

實驗十四範例

金鑰與環境建立 Step1.開通Google Maps Android服務與獲取金鑰,下載Google Play Services套件 Step2.將google-play-services_lib專案匯入至工作區中 Step3.建立專案,並將google-play-services_lib加入參考

加入權限 Step4.在專案的AndroidManifest.xml檔案中加入地圖相關使用權限等 上述程式碼中,需自行將金鑰更換為從Android API網站管理頁面中取得的應用程式金鑰 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> 在<manifest>節點內插入以下程式碼 在<application>節點內插入以下程式碼 <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="金鑰" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

畫面佈局 Step5.將佈局檔預設相對佈局改為垂直線性佈局,並放入元件於佈局中 將佈局檔res/layout/activity_main.xml打開,先將TextView元件刪除,將根節點佈局改為垂直線性佈局LinearLayout(Vertical),將1個LinearLayout(Horizontal)和一個Fragment拖曳到概要視窗的LinearLayout中,拖曳Fragment時會跳出下圖視窗,請選取MapFragment。(跳出視窗中若無MapFragment,選擇取消,請使用XML編輯方式將元件進行編輯)

畫面佈局 再將1個Spinner和1個CheckBox拖曳到LinearLayout(Horizontal)佈局中,修改CheckBox與fragment相關屬性,佈局完整檔案內容如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Spinner android:id="@+id/spinner1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> <CheckBox android:id="@+id/checkBox1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="交通狀況" /> </LinearLayout> <fragment xmlns:map="http://schemas.android.com/apk/res-auto" android:name="com.google.android.gms.maps.MapFragment" android:id="@+id/fragment1" android:layout_width="match_parent" android:layout_height="match_parent" map:cameraBearing="0" map:cameraTargetLat="24.968669" map:cameraTargetLng="121.193855" map:cameraTilt="90" map:cameraZoom="14" map:mapType="normal" map:uiCompass="true" map:uiRotateGestures="true" map:uiScrollGestures="true" map:uiTiltGestures="true" map:uiZoomControls="false" map:uiZoomGestures="true" /> Note:若在XML編輯地圖相關屬性出現錯誤時,請點選Eclipse選單 專案清除

src/MainActivity.java Step6. 打開Java程式,找出XML佈局中的元件並註冊事件 宣告一個GoogleMap物件googleMap變數、一個Spinner物件spnMapType變數、一個CheckBox物件chkTraffic變數和一個儲存的圖型態的字串陣列mapType 在onCreate()方法中的setContentView(R.layout.activity_main);下方,先利用GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);方法判斷Google Play Services在裝置中是否可使用,若不可使用,跳出對話視窗顯示錯誤原因 若可使用,利用findViewById()依據元件代號找 出XML佈局檔中的Spinner和CheckBox物件, 設定Spinner的選項,註冊Spinner的 onItemSelected和CheckBox的 onCheckedChanged事件

src/MainActivity.java Step7.找出片段中的GoogleMap物件 利用FragmentManager類別中的getFragmentManager()方法取得FragmentManager物件,再利用其findFragmentById()方法找出MapFragment物件,最後利用MapFragment的getMap()方法取出GoogleMap物件 Step8.實作onCheckedChanged()方法內容 當使用者點選CheckBox時,此時程式會跳去執行onCheckedChanged()方法,從arg1參數可知此CheckBox是否有被勾選,依據勾選狀況,利用GoogleMap類別的setTrafficEnabled()方法設定是否顯示交通狀況 Step9.實作onItemSelected()方法內容 當使用者選擇Spinner某個選項時,此時程式會跳去執行onItemSelected()方法,依據選取選項,利用GoogleMap類別的setMapType()方法設定顯示地圖模示 Step10.實作onCancel()方法內容 若Google Play Services在裝置中不可使用,會跳出對話視窗,對話視窗消失時,會執行onCancel()方法,呼叫Activity類別中的finish()方法,關閉視窗應用程式

src/MainActivity.java public class MainActivity extends Activity implements OnItemSelectedListener, OnCheckedChangeListener , OnCancelListener { GoogleMap googleMap; Spinner spnMapType; CheckBox chkTraffic; String[] mapType = { "街道圖", "衛星圖", "衛星圖+街道圖", "地形圖" }; @Override 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,111,this); else { spnMapType = (Spinner) findViewById(R.id.spinner1); chkTraffic = (CheckBox) findViewById(R.id.checkBox1); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, mapType); spnMapType.setAdapter(adapter); spnMapType.setOnItemSelectedListener(this); chkTraffic.setOnCheckedChangeListener(this); MapFragment frag=(MapFragment) getFragmentManager().findFragmentById(R.id.fragment1); googleMap=frag.getMap(); }

public void onCheckedChanged(CompoundButton arg0, boolean arg1) { if (arg1) googleMap.setTrafficEnabled(true);/* 顯示交通狀況 */ else googleMap.setTrafficEnabled(false);/* 不顯示交通狀況 */ } public void onItemSelected(AdapterView<?> arg0,View arg1,int arg2,long arg3){ switch (arg2) { case 0:/* 一般街道模式 */ googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); break; case 1:/* 衛星模式 */ googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); case 2:/* 街道衛星混和模式 */ googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); case 3:/* 地形模式 */ googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); @Override public void onNothingSelected(AdapterView<?> arg0) { } public void onCancel(DialogInterface arg0) { finish(); /* 將視窗關閉*/

測試 可在Android 4.2(含)以上版本的Google API模擬器上測試 在實體手機上進行測試 將程式佈建到實體手機前,須先安裝手機USB驅動程式在電腦中 在有些Android 4.2.x裝置中"開發人員選項"功能是被隱藏起來,需進行打開,請點選“設定”“關於手機”,點選“版本號碼”7次,由於每支手機不同,若無此選項或無法打開開發功能選項,請試著點選其他選項,成功時會有視窗跳出提示訊息,啟動後,在設定中就會有“開發人員選項”功能 點選“開發人員選項”,將 “USB偵錯”勾選,執行時,請點選專案,按右鍵,點選“執行為”“執行配置”Target,點選Always prompt to pick device,點選“執行”,會跳出裝置挑選視窗,點選要佈建的裝置,即可將應用程式佈建到裝置上 Note: Google Map 在Android 4.2(含)以上可以在模擬器中執行,但必須在建立模擬器(AVD)時選擇Google APIs level 17(含)以上 Note:若在實體手機上出現更新Google Play services APIs的按鈕,直接點選以進行更新;若是在模擬器上出現更新按鈕,則必須透過Android SDK Manager將對應模擬器Android版本的Google APIs更新 Note:若執行時出現 類似以下訊息 06-03 15:23:09.397: E/AndroidRuntime(6943): FATAL EXCEPTION: main 06-03 15:23:09.397: E/AndroidRuntime(6943): java.lang.RuntimeException: Unable to start activity ComponentInfo{tw.edu.ncu.ce.bnlab.googlemapex/tw.edu.ncu.ce.bnlab.googlemapex.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class fragment 表示在專案的AndroidManifest.xml檔案中,<application>標籤內漏加了 <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> http://developer.android.com/tools/device.html