Android之googleMap(其一)

來源:互聯網
上載者:User

       這一節我們主要講述google map在android手機中的使用,我們一般是用google map API+Location API,就是地圖API+地位API,如果加上一些服務端以及網路方面的知識,我們可以製作出很有創意的應用,而這些正是現在流行的LBS,主要涉及技術有地圖API+地位API+javaee 服務端+手機通訊+XMPP協議(主要是及時通訊)。可以發揮自己的想象作出好的有創意的應用,比如說,我們在車上看見一美女,而又不好意思打招呼,但她手機中也有該LBS應用,那麼我們可以查詢當前多少米範圍內有多少人使用這個應用,然後進一步鎖定到車上的她,然後,你懂的。又或者我們出差在某地,開啟應用可以從地圖中標識找到我們喜歡吃得美食。這一切都歸根於基本的地圖服務,只要我們適當整合資源。

  好了,不說廢話了,開始我們的google map編程吧。

  1:必須下載google Map擴充庫,下載方式是通過AVD,跟你下載最新SDK一樣,具體就不說了。

  2:申請Android Map API Key:

 

  在命令列下進入其路徑地址,進入到:C:\Users\使用者名稱\.android下:然後 輸入 

keytool -list -v -keystore debug.keystore ,這時它一般會提示你輸入密碼,預設的密碼是android, 你輸入android,如果完整輸入android後,沒有顯示也沒有關係,按斷行符號即可,這樣就把三種指紋認證全部列出來了,包括MD5、SHA1、SHA256。(密鑰口令是android)

,後顯示認證指紋如下:

 

3:記下認證指紋,接著去往http://code.google.com/android/maps-api-signup.html,

在複選框上打鉤後,輸入你的認證指紋,然後點擊Generate API Key,這時你就申請到了你的key,當然前提是你必須登入。(您可能需要一個google帳號或者註冊過google市場),

申請Google Maps API 時需要驗證MD5指紋認證,那麼我們就在文字框中輸入MD5認證(注意是MD5,而不是SHA1等)

 

產生的key為:

 

好了,既然有了Key,那麼就來開始編碼了.步驟如下:

1:建立項目,選中Google apis.

2:必須在 AndroidManifest.xml 檔案中聲明: <uses-library android:name="com.google.android.maps"/>

3:當然了,我們需要訪問網路,或者也需要WIFI定位等,那麼就加入些許可權吧。

 

View Code

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

4:建立布局檔案,並添加:

 

View Code

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0XfqXJAIPzqeUtU7mTM2PQDwplHCFk93iAglI0w"
android:clickable="true">
</com.google.android.maps.MapView>

</LinearLayout>

5:然後定義activity繼承MapActivity,這裡我們可以定義菜單,分別切換不同的地圖模式:街道、衛星、交通等。

這裡我們需要瞭解3個對象: MapView 顯示地圖 MapController 控制地圖,當然最重要的是怎麼定位地圖一個點,根據初中地理可知道,使用經緯度可以定義地球任意一點,這裡需要用到google API的GeoPoint對象。

下面是代碼:

 

View Code

package com.dongzi;

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

/**
* location api和map api結合起來,通過location api定位,然後在map api中顯示地圖:
* @author Lenovo
*
*/
public class GooglemapDemoActivity extends MapActivity {
private static final String Tag=GooglemapDemoActivity.class.getName();



private MapView mapView=null;
private MapController mapController=null;

int latitudeE6=39*1000000;
int longitudeE6=116*1000000;
int zoomLevel=12;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView);
//設定街道模式,可放大
mapView.setStreetView(true); //mapView.setTraffic(true);mapView.setSatellite(false);
mapView.setBuiltInZoomControls(true);
//獲得map控制器
mapController=mapView.getController();
mapController.setZoom(zoomLevel);
//預設定位到北京經緯度
GeoPoint gpoint=new GeoPoint(latitudeE6, longitudeE6); //預設顯示北京經緯度
mapController.animateTo(gpoint);
}

@Override
protected boolean isRouteDisplayed() {

return false;
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
menu.add(0, 0, 0, "街道");
menu.add(0, 1, 0, "交通");
menu.add(0, 2, 0, "衛星");
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case 0:
//顯示街道圖
mapView.setStreetView(true);
mapView.setTraffic(false);
mapView.setSatellite(false);
break;
case 1:
//顯示交通圖
mapView.setStreetView(false);
mapView.setTraffic(true);
mapView.setSatellite(false);
break;
case 2:
//顯示衛星圖
mapView.setStreetView(false);
mapView.setTraffic(false);
mapView.setSatellite(true);
break;
default:break;
}
return true;
}

//根據地位API獲得當前經緯度並返回GeoPoint對象,提供與地圖API
private GeoPoint getCurrentGeoPoint(){
LocationManager locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
return new GeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6));
}

}

當然,我們還必須使用地位API,根據手機當前位置獲得經緯度,然後在地圖中顯示。

注意,我們可以把我們手機預設語言設定為中文,這樣顯示路線的時候才會是中文

運行程式

 


 

google map api包中最重要的幾個類。

 

1、MapActivity:這個類是用於顯示Map的Activity類,它需要串連底層網路。

 

2、MapView:是用於顯示地圖的View組件,它必須和MapActivity配合使用。

 

3、MapController:用於控制地圖的移動。

 

4、Overlay:這是一個可顯示於地圖之上的可繪製的對象。


5、GeoPoint:一個包含經緯度位置的對象。

 

 

Android Location API 關於定位功能的比較重要的類:

 

1、LocationManager:本類提供訪問定位服務的功能,也提供擷取最佳定位提供者的功能。另外,臨近警報功能。

 

2、LocationProvider:該類是定位提供者的抽象類別。定位提供者具備周期性報告裝置地理位置的功能。

 

3、LocationListener:提供定位資訊發生改變時的回調功能。必須事先在定位管理器中註冊監聽器對象。

 

4、Criteria:該類使得應用能夠通過在LocationProvider中設定的屬性來選擇合適的定位提供者。


那麼怎麼獲得原生經緯度呢?我們可以使用GPS感應器,






相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.