Android Google Maps - PowerPoint PPT Presentation

android google maps n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Android Google Maps PowerPoint Presentation
Download Presentation
Android Google Maps

play fullscreen
1 / 83
Android Google Maps
288 Views
Download Presentation
daphne-craig
Download Presentation

Android Google Maps

- - - - - - - - - - - - - - - - - - - - - - - - - - - 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 模擬器 實機