Android 地圖與定位 (Maps and Positioning)(1)

Maps and Positioning

Google Maps Android API 第 1 版目前已不建議使用,這是第 2 版的使用筆記。

地圖概觀

使用 Google Maps Android API v2 的步驟:
  1. 下載及設定 Google Play services SDK,Google Maps Android API 是這個 SDK 中的一部份。
  2. 取得 API Key 。你必須在 Google APIs 控制台註冊一個專案,來取得一個簽核過的憑證給你的 App 使用。
  3. 在 Application Manifest(AndroidManifest.xml) 中做相關的設定。
  4. 在 Android 專案中加入地圖。
  5. 發佈您的應用程式。
步驟 1 的 SDK 下載及設定,只有第一次使用時才需要。步驟 2 取得 API Key 的部份在測試時,使用除錯(debug)憑證;在真正發佈 App 時,再使用發佈(release)憑證去重新申請一個給發佈用的 API Key。步驟 3、4、5 在每次專案中都要做。

步驟 1. 下載 Google Play Services SDK

請開啟 SDK Manager ,在 Eclipse 的選單 Window -> Android SDK Manager。

捲到最下方的 Extras 目錄,勾選 Google Play Services 後 Install,如下圖: Google Play Services SDK 是一個以 Library Project 的形式存在,不像是 jar 檔可以直接加入到專案中的 libs 資料夾,所以使用方法稍為麻煩一點。

Google Play Service 運作流程: (圖片來源:http://developer.android.com/google/play-services/index.html)

你的 App 會透過這個 Client Library 去和 Google Play Services 溝通。

確定您已裝好 Google Play Services SDK 後,可以在這個目錄 <android-sdk-folder>/extras/google/google_play_services/libproject/google-play-services_lib 中看到這個 Library Project。記住這個路徑,然後開啟 Eclipse。(提醒:<android-sdk-folder>是指你的Android SDK目錄,每個人安裝的位置可能不一樣,)

在 Eclipse 中,File -> Import 選擇 Android -> Existing Android Code into Workspace ,在 Root Directory 欄位填入(或按下旁邊的瀏覽按鈕去尋找)剛才記住的路徑。完成後這個 Library Project 就加入 Eclipse 中了,之後你的任何專案都可以使用它,不需要再重做以上動作。

重要!Google Play Services SDK 只支援 Android 2.2 之後的系統。

使用 Library Project 的方式,是在 Eclipse 的 Package Explorer 中對你的專案名稱按右鍵 -> Properties,左邊選擇 Android ,右邊拉到最下方,在 Library 中點選 Add ,將剛才加入的 google-play-services_lib 加入就完成了。

在你的專案中 "Is Library" 是不會打勾的。如果你是在開發 Library 就要打勾,你可以去看 google-play-services_lib 專案的這個選項,就會是打勾的。

這裡要做個簡單的錯誤檢查,確定使用者的裝置上是否能夠使用 Google Play Services。
程式碼如下:
private void checkGooglePlayServices(){
    int result = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    switch (result) {
        case ConnectionResult.SUCCESS:
            Log.d(TAG, "SUCCESS");
            break;

        case ConnectionResult.SERVICE_INVALID:
            Log.d(TAG, "SERVICE_INVALID");
            GooglePlayServicesUtil.getErrorDialog(ConnectionResult.SERVICE_INVALID, this, 0).show();
            break;

        case ConnectionResult.SERVICE_MISSING:
            Log.d(TAG, "SERVICE_MISSING");
            GooglePlayServicesUtil.getErrorDialog(ConnectionResult.SERVICE_MISSING, this, 0).show();
            break;

        case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:
            Log.d(TAG, "SERVICE_VERSION_UPDATE_REQUIRED");
            GooglePlayServicesUtil.getErrorDialog(ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED, this, 0).show();
            break;

        case ConnectionResult.SERVICE_DISABLED:
            Log.d(TAG, "SERVICE_DISABLED");
            GooglePlayServicesUtil.getErrorDialog(ConnectionResult.SERVICE_DISABLED, this, 0).show();
            break;
    }
}
除了成功(SUCCESS)之外,都會跳出錯誤訊息,可以告知使用者該怎麼做。這裡是因為要直接測試是否正常,所以才需要自己寫,我實作的結果是,當無法使用 Google Play Services 時,內部已經做了這些判斷並會顯示相對應的訊息。(這只能用實機測,模擬器是沒有 Google Play 的)

步驟 2. 取得 API Key

要使用 Google Maps 的服務,必須在應用程式中使用 Maps API Key,Key 要在Google API Console (控制台)中申請,然後把 Key 加入 AndroidManifest.xml 檔中。

Google 服務是認 Key 不認人的,所以當你未發佈到 Google Play 之前,會用 debug 的金鑰去申請 Key,這個 Key 就只能在這個模擬器或自己的裝置中使用;也就是說,當你要發佈 App 到 Google Play 時,要使用 release 的金鑰,這時就要使用 release 金鑰再去申請一個 Key,給 release 版使用。

為應用程式取得 API Key 的步驟:
  1. 取得應用程式的憑證資料。
  2. 在 Google APIs Console 註冊一個專案,並且在專案中加入 Maps API 服務。
  3. 當你的專案都設定好了,就可以申請一個或多個 Keys。
  4. 最後把取得的 Key 加入應用程式中使用。
詳細說明如下:
1. 取得憑證資料
有2種
  • Debug certificate:由 Android SDK 自動產生,給測試開發用。
  • Release certificate:當發佈 release 版時產生,或使用 keytool 來自行產生。只有這個版本才能發佈到 Google Play。
※取得 Debug 憑證:
  1. 找到 debug keystore 檔。在 Eclipse 中 Windows -> Preferences -> Android -> Build,會看到 Default debug keystore 欄位,即 keystore 儲存的位置,複製這個路徑。
  2. 在命令列中輸入
    Windows 7:
    keytool -list -v -keystore "你複製的路徑" -alias androiddebugkey -storepass android -keypass android
    Mac:
    keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
  3. 執行結果會顯示憑證的資料,你只要複製 SHA1 這個指紋。
※取得 Release 憑證:
  1. 一樣要找到 keystore 的路徑,每個人存放的位置不同。
  2. 在命令列(Win7)中,進入你存放 keystore 的目錄,輸入如下指令:
    keytool -list -keystore 你的keystore名稱
    這會顯示簡單的資訊,例如別名。
  3. 輸入以下指令就可以取得指紋:
    keytool -list -v -keystore 你的keystore名稱 -alias 你的別名
    這裡千萬不要使用 -storepass 及 -keypass ,這兩個參數是在命令列中直接輸入密碼,較不安全。最好是讓 keytool 詢問你時再輸入,密碼不會顯示在螢幕上,比較安全。
2. 在 Google APIs Console 註冊一個專案
首先請到 Google APIs Console 建立專案,第一次進入會直接要求你建立專案,所以就點選 Create Project 建立吧~預設建立的名稱叫做「API Project」,在左上角的下拉選單上顯示,你可以對它更名或不理它用預設的。

點選左邊的功能選單 Service,就可以看到右邊主視窗中列出所有的服務。找到「Google Maps Android API v2」這一項,把開關打開,接受使用條款後就可以使用了。
3. 申請 API Key
步驟(2)完成後,左邊的選單會出現 API Access 選項,選擇它。接著在主視窗中點選「Create new Android key」,在跳出的視窗中輸入剛才步驟(1)取得的SHA1指紋碼,及你的 Android 專案的套件名稱,範例如下:
BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75;com.tonycube.googlemapdemo
SHA1指紋碼和套件名稱中間以分號( ; )區隔。

完成後就會在主視窗看到多了一筆資料「Key for Android apps (with certificates)」裡面會有一個 API key 項目,把 Key 的值複製起來,就可以在你的 Android 專案中使用囉~~~

4. 把鑰匙拿來開門囉~~~
接下來就是把 Key 放進你的應用程式中。打開 AndroidManifest.xml 檔, 選擇 Application 頁籤,Add -> Meta Data,在 Name 欄位填入 「com.google.android.maps.v2.API_KEY」,在 Value 欄位填入剛才複製的 API Key 。

選擇 Permissions 頁籤,Add -> Permission,在 Name 欄位填入「com.tonycube.googlemapdemo.permission.MAPS_RECEIVE」,粗體部份請換成你的套件名稱。Protection level 欄位請選擇「signature」。

再次 Add -> Uses Permission,在 Name 欄位填入「com.tonycube.googlemapdemo>.permission.MAPS_RECEIVE」,一樣粗體部份換成你的套件名稱。

存檔後 API Key 的部份就算完成了~~呼~~~

步驟 3. 設定 AndroidManifest.xml

使用 Google Maps Android API 需要指定以下權限:
  • android.permission.INTERNET:使用網路下載地圖圖資。
  • com.google.android.providers.gsf.permission.READ_GSERVICES:允許 API 存取以網頁為基礎的服務 (web-based services)。
  • android.permission.WRITE_EXTERNAL_STORAGE:允許 API 在裝置的外部儲存區(sdcard)上儲存快取圖資。
以下權限為非必要,主要是用來定位:
  • android.permission.ACCESS_COARSE_LOCATION:允許 API 使用 WiFi 網路或基地台做定位(定位較不精準)。
  • android.permission.ACCESS_FINE_LOCATION:允許 API 使用 GPS 做精準定位。
所以就是以上 5 項權限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Google Maps Android API v2 需要使用 OpenGL ES version 2,對於無法使用 OpenGL ES version 2 的裝置會無法使用第 2 版的 Android Google 地圖,因此必需限制有此項功能的裝置才能安裝。
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
當設定這個標籤後,會在 Google Play 直接排除無法使用的裝置,也就是使用者的裝置沒有 OpenGL ES v2 功能的就不能下載,避免使用者下載後無法使用而浪費時間產生不滿。

這個屬性要加在<user-permission>標籤之後,或是在 AndroidMenifest.xml 中選擇 manifest 頁籤,Add -> uses feature 也可以。

步驟 4. 在 Android 專案中加入地圖

終於可以開始使用地圖了。

建立一個 Android 專案,練習時建議用最新的 Android API 4.0 或之後的版本來測試(但必須至少在 2.2 版之後,因為之前的版本不支援 Google Play Services)。AndroidManifest.xml 照前面所說的做好設定,並記得加入 Library,接下來直接修改 main.xml 為如下程式碼:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.MapFragment" />
然後就可以發佈測試了,但這邊要注意,只能在實機上測試,因為我們有用到 Google Play Service ,而 Google Play Service 必須和 Google Play Store 做溝通,在模擬器上是沒有 Google Play Store 的(網路上好像有教怎麼在模擬器上安裝,但何必麻煩),所以直接拿實機測試吧~~

結果如下: 呼~~~打完收工。

參考資料:

本文網址:http://blog.tonycube.com/2012/12/androidmaps-and-positioning1.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

56 則留言

  1. 感謝這篇詳細解說!!
    受益良多

    不過想請問一下最後的MAP物件會看的到東西嗎
    因為我執行之後呈現白白一片完全沒有其他地標之類的,但是右下角確有縮放的功能 這是甚麼原因呢..?)

    回覆刪除
    回覆
    1. 檢查看看網路是否有連線,可能是無法下載圖檔吧我猜,順便看一下DDMS有沒有顯示什麼錯誤。

      刪除
    2. 作者已經移除這則留言。

      刪除
    3. fragment一定要使用這個標頭

      刪除
    4. 後來有查到一個原因,如果你有更改 Package 名稱的話,是會出現空白,因為 map 的 api key 是用我申請的 Package 名稱,所以必須對應相同的 Package 名稱,建議你自己申請一個,並把範例中的 api key 換成你自己的。

      如果不是這個原因的話,就還要才查一下。

      刪除
    5. 謝謝Chi-En Feng大和Tony老師的回覆!!
      上面的問題解決了,是老師說得沒錯還有一點是網路我當時沒開,以至於沒有開始載圖檔XD

      不過我又愈到了一個棘手的問題...
      我是在Fragment類別下寫map

      第一次點選地圖是可以正常執行的(我是使用ActionBar來作切換)
      不過之後切換就會造成Force Close了...

      以下是我的部份code
      public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
      {
      View v = inflater.inflate(R.layout.fragment4, null, false);

      map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
      .getMap();
      return v;
      }


      刪除
    6. 如果有FC,看DDMS應該會有資訊顯示。

      刪除
  2. 版主你好 我現在還在使用v1 = = 想問一下 我想要地圖上同時顯示兩個藍點要怎弄呢?
    我的藍點是指用MyLocationOverlay後他會自己產生的藍點

    因為我想做一下多人定位即時通訊app
    當我new MyLocationOverlay後,不知道有什麼方法可以把經緯度填進去

    回覆刪除
    回覆
    1. 沒用過v1所以...
      看API應該是用這個drawMyLocation (https://developers.google.com/maps/documentation/android/v1/reference/com/google/android/maps/MyLocationOverlay#drawMyLocation(android.graphics.Canvas, com.google.android.maps.MapView, android.location.Location, com.google.android.maps.GeoPoint, long))

      不過既然它叫 MyLocationOverlay 就表示它只能加一個點,就是我現在的位置,因為"我"不會有兩個 :)

      你可以參考這篇(https://developers.google.com/maps/documentation/android/v1/hello-mapview)官方教學,使用 OverlayItem 應該可以達到你的要求。

      刪除
  3. 板主您好
    請問一下同一個Debug憑證可以讓不同package使用嗎
    我之前按照您的方法可以成功獲得地圖
    但是新增一個app後,也有更換不同的package name
    在Google APIs Console取得新的API Key
    結果地圖上一片空白,出現錯誤訊息如下
    07-31 15:59:16.745: E/Google Maps Android API(22666): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
    有反覆檢查過相關設定了,煩請解惑,謝謝您

    回覆刪除
    回覆
    1. 通常你只會有一個Debug憑證,所以理論上應該是可以讓不同app(Package)來使用。它的錯誤訊息,除了說是認證可能出問題之外,網路也有可能出錯,這些都要檢查看看。不過我覺得認證的部份出錯的可能比較大,因為網路要測很快。

      刪除
    2. 謝謝板主的回覆
      我今天早上發現一個神奇的現象
      APP原封不動再port一次
      地圖出現了,也沒有錯誤訊息
      怎麼隔一天就不一樣呢?
      之後有問題再說了^^
      謝謝您

      刪除
  4. 請問老師:
    我照上面所提到的加入


    加入後卻顯示出:"Unexpected namespace prefix "xmlns" found for tag fragment"此ERROR的訊息,請問老師這是甚麼意思不是很懂

    回覆刪除
    回覆
    1. 檢查一下 xml 檔,如果你的 fragment 不是單獨一個(像我的範例一樣),而是放在其他 layout 之下的話,記得把 fragment 中的 xmlns:android="http://schemas.android.com/apk/res/android" 給刪掉,你的 layout 中應該會有一個一模一樣的。

      刪除
  5. 請問板主:
    ※取得 Debug 憑證
    在命令列中輸入
    是指cmd嗎?

    回覆刪除
    回覆
    1. 他寫沒有這個指令 是我少裝了什麼東西嗎?

      刪除
    2. Keytool 是 Java 的工具,在 JDK 安裝目錄下的 /bin 目錄中,你可能是沒設定環境變數所以才找不到,請參考這篇
      http://mis.hwai.edu.tw/~kevin/MISProject/JAVAProject/chapter1/c1-3.htm
      設定你的 JAVA_HOME

      刪除
    3. 請問板主
      請問我要如何用cmd切換到java使用keytool

      刪除
    4. 我直接到Java\jdk1.7.0_40\bin目錄下使用ok嗎??
      還是本來就是這樣用??

      刪除
    5. 如果不設定環境變數的話,就要切換到bin目錄

      刪除
    6. 因為我設定後 還是不能使用 那我keystore 可以放到那個位置打完指令後在放回去嗎??

      刪除

    7. 環境變數設定後要重新開機

      刪除
  6. 版主你好:
    我照著上面的操作,但是我點及按鈕轉到該頁面就關閉
    我適用實機測試

    回覆刪除
    回覆
    1. 要看一下DDMS上有沒有顯示什麼錯誤訊息,
      猜測可能是UI,也就是main.xml可能有問題(不確定),
      或是你的按鈕事件裡面開啟地圖頁面的程式碼有錯,
      如果是API Key或權限沒設好,
      只會出現一片空白,並不會強制關閉。

      刪除
    2. 多謝版主。
      我是增加這一段,才變成顯示空白。


      想請問版主
      權限的部分,上面說明設定的部分我有增加上去。
      API Key 我也有重新設定,這樣子還會空白。
      我要朝什麼方向去解決

      刪除
    3. meta-data
      android:name="com.google.android.gms.version"
      android:value="@integer/google_play_services_version"

      刪除
    4. 我終於發現我為何是空白 >"<||
      是API那邊的SHA1,我用到測試的憑證
      一直沒有想很多,剛剛突然想到這個問題
      版主的資訊明明寫得很清楚,根本就是自己搞自己

      刪除
    5. 哈~有時候頭腦頓頓的,是會沒想清楚,
      自己找到問題其實是最棒的,下次一定會記得。
      加油囉~~

      刪除
    6. 還有,如果你是用自己申請的API Key,
      我記得不會立即生效,要等一陣子才會能用,
      這期間也是空白畫面。

      刪除
  7. TONY 你好:
    這邊想請問你有寫到藍芽相關的技術嗎?
    剛好碰到藍芽相關問題,想請教

    回覆刪除
    回覆
    1. 沒有,
      是什麼問題(好奇~)

      刪除
    2. 我是從 ANDROID 的範例 有藍芽基礎架構
      當模組在發送資料給手機時,資料過長時會有分段。
      查到的資訊是使用延遲的方式去獲得,想所有沒有更好的辦法。

      我現在需要寫背景執行服務.....也不太會寫
      模組有發出資訊時可以顯示.....
      ANDROID 新手 很多都不太會

      刪除
    3. 如果你傳輸的資料不會太大,
      可以用官網教的方式
      http://developer.android.com/guide/topics/connectivity/bluetooth.html#ManagingAConnection
      用 Thread 去執行就好,
      應該比你現在的方法簡單一點,
      但缺點可能就是不能在傳輸的時候關閉螢幕吧。

      刪除
    4. 謝謝你的解答。
      假設需要保持連線是否有可能達到呢?

      刪除
    5. 不確定,查看看說明文件有沒有寫

      刪除
  8. 謝謝你的指導

    來去研究[Android]地圖與定位(Maps and Positioning)(3)的軌跡
    過沒多久我要要詢問了 >"<....

    回覆刪除
  9. 我想請問 做到最後一個步驟 為什麼找不到 main.xml 檔呢

    回覆刪除
    回覆
    1. 在 layout 資料夾裡面,可能你的檔名不叫 main.xml 。

      刪除
  10. 我想請問您
    因為我也是使用V2開發地圖
    在API Key 一開始創建時 Status 是 Active (可以開發顯示地圖)
    但隔幾天之後再去compiler
    API Key 就變成 Status 是 InActived (當我測試地圖時就變成空白的)
    要怎麼做才能讓他一直是啟動而不是閒置呢?
    上網也找不到相關解答
    謝謝您

    回覆刪除
    回覆
    1. 你可能重覆申請Key(Generate new key),舊的key會在24小時後失效。
      記得點一下就申請了,之後不能再點,我記得key不會立即生效,要等一下。

      可以參考這個討論
      http://stackoverflow.com/questions/15009972/google-maps-api-v2-api-key
      它的問題和你相似。

      刪除
    2. 我試了一下
      當我設定之後預設會給我一組API Key
      但是用這組key會出現白畫面

      如果我按下Generate new key
      就會有新的key 可以開發
      但沒多久就會變閒置
      請問創建時他的創建日期有差嗎?
      還是我還缺少甚麼呢?(步驟都是照您做得走)

      刪除
    3. 出現白畫面的問題:
      檢查一下Google API Console中是不是有把"Google Maps Android API v2"開啟,及是否有用 debug/release keystore 去產生憑證。

      參考:
      http://stackoverflow.com/questions/16564550/in-version-2-map-view-does-not-show-map

      http://stackoverflow.com/questions/17464611/google-map-api-v2-shows-blank-screen-with-only-zoom-buttons-on-emulator

      閒置的問題我也不太清楚,搜尋的結果大都是說,在整個申請 Key 及使用的流程上要正確,好像就不會有閒置的問題出現。

      刪除
  11. 終於解決了
    原來一直是我的Key流程沒設定好
    一直在團團轉
    謝謝版主的指導
    不然我會一直笨下去

    回覆刪除
  12. 請教一下,版主
    我在SDK裡面的extras找不到Google Play Services
    這怎麼解決?

    回覆刪除
    回覆
    1. 下載新的SDK,之後更新ADT。

      參考這篇
      http://stackoverflow.com/questions/20301016/missing-google-play-services-in-sdk-manager

      刪除
  13. 作者已經移除這則留言。

    回覆刪除
    回覆
    1. https://translate.google.com/#en/zh-TW/unfortunately%20has%20stopped
      它告訴你發生事情的結果,你要去找出原因

      刪除
  14. 請問老師,我的模擬器出現了一句
    Googlemap2 won' run without Google Play services,which are missing from your phone.
    我是用android studio來做的,那裡錯了


    MainActivity
    package com.example.csp.googlemap2;

    import android.support.v4.app.FragmentActivity;
    import android.os.Bundle;

    import com.google.android.gms.maps.CameraUpdateFactory;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.OnMapReadyCallback;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.MarkerOptions;

    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    }


    /**
    * Manipulates the map once available.
    * This callback is triggered when the map is ready to be used.
    * This is where we can add markers or lines, add listeners or move the camera. In this case,
    * we just add a marker near Sydney, Australia.
    * If Google Play services is not installed on the device, the user will be prompted to install
    * it inside the SupportMapFragment. This method will only be triggered once the user has
    * installed Google Play services and returned to the app.
    */
    @Override
    public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
    }

    回覆刪除
    回覆
    1. GoogleMap需要Google Play Services,一般模擬器上沒有,要在有Google Play Services 的實機上跑。

      刪除
    2. 不懂使用Android studio在實機上跑,不知道它的apk放在那裡⋯⋯

      刪除
  15. 作者已經移除這則留言。

    回覆刪除
  16. 作者已經移除這則留言。

    回覆刪除
  17. 作者已經移除這則留言。

    回覆刪除
  18. 老師你好:
    請問步驟四那段程式碼是放在androidmanifest.xml_main.xml 這裡面嗎?
    如果是的話 fragment 這裡會出現錯誤 請問該怎麼解決呢?
    謝謝。

    回覆刪除
    回覆
    1. 要看是什麼錯誤才知道怎麼解決,看看 logcat 有顯示什麼錯誤。
      androidmanifest.xml 和 main.xml 的內容沒什麼特別的,
      如果照文章中所說的設定應該是不會錯才對。

      刪除

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。