Android--Google Map API V2使用
一、获取API Key
1、先获取SHA-1 fingerprint
数字证书是有两种,一种是debug,还有release。前者只能用于测试;后者才可以用于实际产品。
debug:在命令行中输入命令:keytool -list -v -keystore "C:\Users\your_user_name\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
release:替换签名文件路径;替换密码即可
SHA-1 fingerprint也可以在Eclipse中获取,如图:
2、登录网站获取API Key
网址:https://code.google.com/apis/console/ 用Gmail的账户登录,如果是第一次的话,需要创建项目,默认情况会创建一个叫做API Project的项目。
点击左边的Services,会在中间看到很多的APIs和Services,找到Google Maps Android API v2,然后把它设置成on,需要接受一些服务条款。
在左边的导航条中选择API Access。在出来的页面中选择Create New Android Key...就可以生成key了:
3、创建项目
AndroidManifest.xml中声明权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <!-- The following two permissions are not required to use Google Maps Android API v2, but are recommended. --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
声明api key
<!-- Google Map Key --> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="前面申请的key" /> <meta-data android:name="com.google.android.gms.version" android:value="4030500" />
由于google maps v2需要opengl es v2的支持,所以必须在androidmanifest.xml里添加以下元素
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
加载map要用到SupportMapFragment
SupportMapFragment fragment = SupportMapFragment.newInstance();
getSupportFragmentManager().beginTransaction().add(R.id.ll_map, fragment).commit();
4、添加标记物Marker
默认的Marker
private GoogleMap mMap; mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); mMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Hello world"));
自定义Marker
private static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298); private Marker melbourne = mMap.addMarker(new MarkerOptions() .position(MELBOURNE) .title("Melbourne") .snippet("Population: 4,137,400") .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));
自定义Marker时使用了BitmapDescriptorFactory创建一个自定义的Marker图标,在使用BitmapDescriptorFactory之前先看看先看看它的文档,使用这个类的任何方法之前,你必须做下列操作之一,以确保这个类被初始化:1:从MapFragment或者MapView中添加一个GoogleMap,你可以通过调用GoogleMap.getMap()方法,判断返回是否为空。2:调用 MapsInitializer.initialize(Context)方法,只要不抛出com.google.android.gms.common.GooglePlayServicesNotAvailableException GooglePlayServicesNotAvailableException这个异常就可以正常起始化。
还有Marker的点击事件,GoogleMap.setOnMarkerClickListener(); Marker的拖动事件,GoogleMap.setOnMarkerDragListener();(Marker默认是不能拖动的,创建Marker时设置melbourne.setDraggable(true)为可拖动)
点击 Marker时会默认弹出信息窗口Info Windows,你可以使用InfoWindowAdapter接口,调用GoogleMap.setInfoWindowAdapter()去自定义Info Windows,InfoWindowAdapter要实现两个方法 getInfoWindow(Marker)和getInfoContents(Marker)。api会先调用getInfoWindow(Marker)方法,如果返回null,再继续调用getInfoContents(Marker)方法,如果继续返回null,api将调用默认的info windows。info windows跟marker一样具有点击事件GoogleMap.setOnInfoWindowClickListener()。