1 / 83

Android Google Maps

Android 智慧型手機程式設計. Android Google Maps. 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2 2013/5 V3 V4. Google Maps. Reference : https://developers.google.com/maps/documentation/android/start#creating_an_api_project. 取得 Google Map API. Step1: 先進入 JDK 目錄. Google Maps. 透過 keytool.exe 建立認證指紋 SHA1

idania
Télécharger la présentation

Android Google Maps

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Android智慧型手機程式設計 AndroidGoogle Maps 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2 2013/5 V3 V4

  2. Google Maps Reference: https://developers.google.com/maps/documentation/android/start#creating_an_api_project • 取得Google Map API Step1:先進入JDK目錄

  3. Google Maps • 透過keytool.exe建立認證指紋SHA1 • 需要debug_keystore路徑

  4. 新版IDE已經列出SHA1碼不過好像不太能用 下一步驟用

  5. 重做一次認證 • 輸入 • keytool -list -v -keystore "C:\Documents and Settings\Administrator\.android\debug.keystore“ • 預設密碼是android 來自Eclipse內的default keystore

  6. Google Maps • 產生認證指紋 要的是SHA1編碼

  7. Google Maps • 進入Google Map API Key申請頁面 • http://code.google.com/intl/zh-Tw/android/add-ons/google-apis/maps-api-signup.html(不再使用) 目前不用 輸入認證指紋碼

  8. Google Maps Android API Version 1開發法已經停用 • http://cheng-min-i-taiwan.blogspot.tw/2013/04/google-maps-android-api-v2-android.html • 新版API需要配合Google Play Services

  9. 進入申請頁面 • https://developers.google.com/maps/documentation/javascript/tutorial#api_key 需要登入Google

  10. Google Maps • 進入Google Map API Key申請頁面 Reference:這裡有做法 https://developers.google.com/maps/documentation/android/start#creating_an_api_project

  11. API Access

  12. 使用SHA1與package Name

  13. result

  14. 使用API Key

  15. 首先將API key加入AndroidManifest.xml <meta-dataandroid:name="com.google.android.maps.v2.API_KEY"android:value="your_api_key"/>

  16. 加入使用權限

  17. 加入使用權限到AndroidManifest.xml 改成自己的package name <permissionandroid:name="ctu.rcjao.helloandroid.permission.MAPS_RECEIVE“ android:protectionLevel="signature"/> <uses-permission android:name="ctu.rcjao.helloandroid.permission.MAPS_RECEIVE"/> 改成自己的package name

  18. 加入使用權限到AndroidManifest.xml

  19. Use permission <uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/><!-- The following two permissions are not required to useGoogle Maps Android API v2, but are recommended. --><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>

  20. 再加入use-feature

  21. uses-feature <uses-featureandroid:glEsVersion="0x00020000"android:required="true"/>

  22. 最後加入地圖

  23. Xml檔案 加入下列code <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.SupportMapFragment"/>

  24. JAVA程式 publicclass Map extends FragmentActivity { @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map); } }

  25. 執行 結果不能跑,有錯誤!

  26. 打開SDK中的SDK Manager,找到Extras並安裝Android Support Library及 Google Play Services兩個項目

  27. 匯入Google Play Services函式庫File > Import > Android > Existing Android Code Into Workspace 路徑: android-sdk\extras\google\google_play_services\libproject\google-play-services_lib

  28. 匯入完成

  29. 專案要加入這個library

  30. 還有要開google Maps Android API v2 不是這個喔!

  31. 執行 • 需要實體手機 • 過程中可能需要更新Google Play

  32. Google Maps 實體手機

  33. 發佈到AVD2.2

  34. 有了,但是還是不行! 換個版本4.0.3

  35. 使用SDK 4.0.3 AVD設定

  36. 設定模擬器顯示地圖 • 首先在模擬器中安裝Google Play Service • 修改System目錄之檔案權限,允許寫入權限 • adb shell mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system • adb shell chmod 777 /system/app • adb push GoogleLoginService.apk /system/app/ • adb push GoogleServicesFramework.apk /system/app/ • adb push Phonesky.apk /system/app/

  37. adb install Maps_6.12.0.apk • adb install com.google.android.gms-3.apk Google Play Service 要夠新 漫長的等待….

  38. 如果出現要update Google Play Service!

  39. 通常是失敗,因為不支援線上更新 下載新的APK重裝就可以了

  40. result

  41. 在Google Maps上加標示 @SuppressLint("NewApi") publicclass Main extendsFragmentActivity { //要顯示的座標 staticfinal LatLng CTU = new LatLng(24.06660656734983, 120.54975986480713); private GoogleMap map; @SuppressLint("NewApi") @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //取得地圖物件 map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); //建立紅色氣球標示 Marker mk = map.addMarker(new MarkerOptions().position(CTU).title("建國科技大學").snippet("資管系")); // 設定縮放大小是16,且將標示點放在正中央 map.moveCamera(CameraUpdateFactory.newLatLngZoom(CTU, 16)); } } • SDK至少要4.0 如果更早的SDK也要可以用 map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

  42. result

  43. 修改UI的xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <fragment android:layout_weight="1" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_weight="0" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="地圖" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="衛星" /> </LinearLayout> </LinearLayout> 原地圖 設定layout_weight 加入這段來切換地圖種類

  44. result

  45. Oncreate中加入下列code Button btn_normalview=(Button)findViewById(R.id.button1); Button btn_satellitetview=(Button)findViewById(R.id.button2); btn_normalview.setOnClickListener(new Button.OnClickListener() { publicvoid onClick(View arg0) { map.setMapType(GoogleMap.MAP_TYPE_NORMAL); //顯示地圖模式 } }); btn_satellitetview.setOnClickListener(new Button.OnClickListener() { publicvoid onClick(View arg0) { map.setMapType(GoogleMap.MAP_TYPE_SATELLITE); //顯示衛星模式 } });

  46. 地址轉座標功能將下列code加入UI (fragment前) <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="0" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="顯示" /> <TextView android:id="@+id/textview1" android:text="" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>

  47. 地址轉座標功能 Button btn_address_to_geo=(Button)findViewById(R.id.button3); btn_address_to_geo.setOnClickListener(new Button.OnClickListener() { publicvoid onClick(View arg0) { try { EditText inputaddress=(EditText)findViewById(R.id.editText1); tv1=(TextView)findViewById(R.id.textview1); Geocoder geocoder = new Geocoder(Main.this, Locale.getDefault()); List<Address> geoResults = geocoder.getFromLocationName(inputaddress.getText().toString(), 5); while (geoResults.size()==0) { geoResults = geocoder.getFromLocationName(inputaddress.getText().toString(), 5); } if (geoResults.size()>0) { Address addr = geoResults.get(0); Double latitude = addr.getLatitude() * 1E6; Double longitude = addr.getLongitude() * 1E6; tv1.setText(latitude + "/" + longitude); } } catch (Exception e) { tv1.setText("轉換失敗"); } } });

  48. result 模擬器 實機

More Related