綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] 開發APP並使用Google Map的相關問題

[複製連結] 查看: 2286|回覆: 7|好評: 0
跳轉到指定樓層
樓主
deep_dream | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2011-10-20 18:42

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 deep_dream 於 2011-10-20 18:55 編輯

基本上,小弟我算了已經做到完成一半了…但是後面一直卡住,書上沒寫到,Google也Google了很久~
所以就想說來請教一下站上是否有對這方面有所研究的前輩,給我一點建議或經驗上的傳承~

在Layout上面很簡單,除了2個TextView之外,就只有一個MapView而已~

測試環境:
自己的手機,我因為是要實測Google Map & GPS,所以就不用模擬器了…
Samsung S5830
Android 版本:2.3.7
Mod版本:Cyano Ace - RC 2.1

WIFI正常、3G正常、GPS正常。

測試時只開GPS,3G!

前面工作:
已經有做完整個使用Google Map API的動作~Google Map可以正常在我的手機上面顯示,不過只能顯示ZoomLevel 16,這個我目前還沒有頭緒~

[default.properties]
# Project target.
target=Google Inc.:Google APIs:7

[main.xml]
已加入Google Map API
<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="Key隱藏"
/>

[AndroidManifest.xml]
已加入相關權限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
已加入Library
<uses-library android:name="com.google.android.maps"></uses-library>


[GetGPSInfoActivity.java] 主程式,名稱其實不重要~
基本上,除了LocationListener我有另外實作之外,其它的都是直接使用現有的Class。
  1. import省略…
  2. public class GetGPSInfoActivity extends MapActivity {
  3.         private int zoomLevel = 16;

  4.         private GeoPoint nowGeoPoint;
  5.         private Location location;
  6.         private LocationManager locationManager;
  7.         private MyLocationListener myLocationListener;       
  8.        
  9.         private MapView mapView;
  10.         private MapController mapController;
  11.         private MyLocationOverlay myLocationOverlay;
  12.         private TextView gpsText1;
  13.         private TextView gpsText2;

  14.         @Override
  15.         public void onCreate(Bundle savedInstanceState) {
  16.                 super.onCreate(savedInstanceState);
  17.                 setContentView(R.layout.main);

  18.                 gpsText1 = (TextView) findViewById(R.id.gpsText1);
  19.                 gpsText2 = (TextView) findViewById(R.id.gpsText2);
  20.                
  21.                 mapView = (MapView) findViewById(R.id.mapView);
  22.                 mapView.setBuiltInZoomControls(true);
  23.                 mapView.displayZoomControls(true);
  24.                 mapController = mapView.getController();
  25.                 mapController.setZoom(zoomLevel);

  26.                 startListener();
  27.                 startOverlay();
  28.                 startZoom();       
  29.         }

  30.         3個Function省略

  31.         private class MyLocationListener implements LocationListener {
  32.         //這邊實作LocationListener並Overwrite onLocationChanged()
  33.         }

  34. }
複製代碼
3大部分
startListener();
這邊會使用LOCATION_SERVICE並判斷NETWORK或GPS是否打開,並開啟一個Listener。

startOverlay();
從MapView拿到Overlays並在地圖上標記。

startZoom();
從MapView拿到內建的ZoomControls,並Overwrite ZoomIn ZoomOut事件。
(一開始找不到如何抓取內建的ZoomControl的事件卡超久…後來改用外部的停掉內建的,不過最後又改用內建的並解決了。)

  1. //兩個事件
  2. zoomControls.setOnZoomInClickListener(new OnClickListener() {
  3.         public void onClick(View v) {
  4.                 mapController.zoomIn();
  5.                 mapView.invalidate(); <---這行沒用…
  6.                 Toast.makeText(GetGPSInfoActivity.this, "ZoomIn Event!", Toast.LENGTH_SHORT).show(); <---用來檢查事件有無被呼叫,這是有成功的。
  7.         }
  8. });
  9. zoomControls.setOnZoomOutClickListener(new OnClickListener() {
  10.         public void onClick(View v) {
  11.                 mapController.zoomOut();
  12.                 mapView.invalidate(); <---這行沒用…
  13.                 Toast.makeText(GetGPSInfoActivity.this, "ZoomOut Event!", Toast.LENGTH_SHORT).show(); <---用來檢查事件有無被呼叫,這是有成功的。
  14.         }
  15. });
複製代碼
實測的圖片:
進入程式之後的畫面
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
 樓主| deep_dream | 收聽TA | 只看該作者
發表於 2011-10-21 15:50
本帖最後由 deep_dream 於 2011-10-21 16:04 編輯

雖然沒有人回覆,不過沒關係,我已經自行解決了~~~
事實上跟code完全沒有任何的關係,而是我自己產生的Google Map KEY不能用…
(我是按照網頁說明一步一步操作地,卻還是不行,實在是很無言…)

我現在是用Debug的KEY,就可以正常Work了~~~謝謝!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
guoty | 收聽TA | 只看該作者
發表於 2011-10-26 09:04
key 的問題我也犯過同樣的錯誤。
zoomin-zoomout mapview 有自帶工具打開即可:
myMapView.displayZoomControls(true);
MapView.setBuiltInZoomControls(true);  //顯示控制工具

新一點手機直接兩點觸控,即可控制收放。
重畫指令在mayview 與 map  ItemizedOverlay 上皆不會動作, 我試過

加油了,我已累一段時間,但滿有趣的
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
 樓主| deep_dream | 收聽TA | 只看該作者
發表於 2011-10-26 10:56
謝謝你的回覆~
事實上我現在已經不需要使用mapView.invalidate();了
因為之間是key的問題,而現在Debug的key已經可以使用了,所以就完全不需要做這個指令了~
我現在是放大縮小拖拉地圖都是可以正常顯示了~
所以事實上mapView.invalidate();是多餘的了~
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
guoty | 收聽TA | 只看該作者
發表於 2011-10-26 12:10
封裝成APK時Debug key就不能用,需再申請正式發行的Key,
否則地圖不會顯示,
我以前曾犯這種錯誤。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
natsu0813 | 收聽TA | 只看該作者
發表於 2011-11-3 16:20
應該不會有這個問題,我想您可以檢查你的環境優先
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

7
allenica | 收聽TA | 只看該作者
發表於 2011-11-28 16:05
我想使用 BT外接 GPS, 導航空OK ,Google就不行
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

8
allenica | 收聽TA | 只看該作者
發表於 2011-11-28 16:07
我想使用 BT外接 GPS, 導航王OK ,Google MAP就不行
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則