馬上加入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。- import省略…
- public class GetGPSInfoActivity extends MapActivity {
- private int zoomLevel = 16;
- private GeoPoint nowGeoPoint;
- private Location location;
- private LocationManager locationManager;
- private MyLocationListener myLocationListener;
-
- private MapView mapView;
- private MapController mapController;
- private MyLocationOverlay myLocationOverlay;
- private TextView gpsText1;
- private TextView gpsText2;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- gpsText1 = (TextView) findViewById(R.id.gpsText1);
- gpsText2 = (TextView) findViewById(R.id.gpsText2);
-
- mapView = (MapView) findViewById(R.id.mapView);
- mapView.setBuiltInZoomControls(true);
- mapView.displayZoomControls(true);
- mapController = mapView.getController();
- mapController.setZoom(zoomLevel);
- startListener();
- startOverlay();
- startZoom();
- }
- 3個Function省略
- private class MyLocationListener implements LocationListener {
- //這邊實作LocationListener並Overwrite onLocationChanged()
- }
- }
複製代碼 3大部分
startListener();
這邊會使用LOCATION_SERVICE並判斷NETWORK或GPS是否打開,並開啟一個Listener。
startOverlay();
從MapView拿到Overlays並在地圖上標記。
startZoom();
從MapView拿到內建的ZoomControls,並Overwrite ZoomIn ZoomOut事件。
(一開始找不到如何抓取內建的ZoomControl的事件卡超久…後來改用外部的停掉內建的,不過最後又改用內建的並解決了。)
- //兩個事件
- zoomControls.setOnZoomInClickListener(new OnClickListener() {
- public void onClick(View v) {
- mapController.zoomIn();
- mapView.invalidate(); <---這行沒用…
- Toast.makeText(GetGPSInfoActivity.this, "ZoomIn Event!", Toast.LENGTH_SHORT).show(); <---用來檢查事件有無被呼叫,這是有成功的。
- }
- });
- zoomControls.setOnZoomOutClickListener(new OnClickListener() {
- public void onClick(View v) {
- mapController.zoomOut();
- mapView.invalidate(); <---這行沒用…
- Toast.makeText(GetGPSInfoActivity.this, "ZoomOut Event!", Toast.LENGTH_SHORT).show(); <---用來檢查事件有無被呼叫,這是有成功的。
- }
- });
複製代碼 實測的圖片:
進入程式之後的畫面
|