Android 国内集成使用谷歌地图

由于众做周知的原因在国内使用谷歌地图不太方便,在开发中如果直接使用会出现些问题。但国内的如百度地图,高德地图等都无法提供详细的国外地图数据,所以研究一下喽,,,

使用 Google Maps Android API v2使用谷歌提供的SDK,Android Studio开发。首先保证SDK Manager中 Google Play service服务已经安装。

2.新建一个工程GoogleMapDemo,然后File ->Project Structure->[app]->->Dependences,点击加号,添加play service依赖。

3.要使用谷歌提低,需要到Google Developers Console申请一个Key。 首先创建一个工程,然后在API标签选择启用Google Maps Android API v2,也可以顺带多选几个比如JS的备用。

在 Credentials 标签 Public API access 处添加一个Android key.

使用用于签名的keystore生成一个SHA-1指纹,可以先使用debug.kestore。我的在C:\Users\RANDY.android\下。 keytool -list -v -keystore debug.keystore 密码:android 将生成的指纹填在指定输入框,create OK。同时会生成一个API KEY。

4.配置工程的Manifest文件:

====”android.permission.WRITE_EXTERNAL_STORAGE”/><!– The following two permissions are not required to useGoogle Maps Android API v2, but are recommended. –>=”android.permission.ACCESS_FINE_LOCATION”/><uses-featureandroid:glEsVersion=”0x00020000″android:required=”true”/><application=”@string/app_name”android:theme=”@style/AppTheme” ><activity>=><meta-dataandroid:name=”com.google.android.gms.version”android:value=”@integer/google_play_services_version” /><meta-data></manifest>

5.配置Activity,使用Fragment来显示地图。 布局:

==”match_parent”tools:context=”.MainActivity”><TextView=”wrap_content” /><fragment=>

MainActivity

package map.randy.com.googlemapdemo;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import com.google.android.gms.maps.CameraUpdateFactory;import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.MapFragment;import com.google.android.gms.maps.OnMapReadyCallback;import com.google.android.gms.maps.model.LatLng;import com.google.android.gms.maps.model.MarkerOptions;{(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);mapFragment.getMapAsync(this);}(GoogleMap googleMap) {LatLng sydney = new LatLng(-33.867, 151.206);googleMap.setMyLocationEnabled(true);googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));googleMap.addMarker(new MarkerOptions().title(“Sydney”).snippet(“The most populous city in Australia.”).position(sydney));}}

运行:

但是这是在翻墙情况下,,如果没有翻墙,只能是空白。。。

而谷歌在V2提供了一个遮罩层,开发者可以使用它来自定义地图。

package map.randy.com.googlemapdemo;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import com.google.android.gms.maps.CameraUpdateFactory;import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.MapFragment;import com.google.android.gms.maps.OnMapReadyCallback;import com.google.android.gms.maps.model.LatLng;import com.google.android.gms.maps.model.MarkerOptions;import com.google.android.gms.maps.model.TileOverlayOptions;import com.google.android.gms.maps.model.TileProvider;import com.google.android.gms.maps.model.UrlTileProvider;import java.net.MalformedURLException;import java.net.URL;import java.util.Random;{(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);TileProvider tileProvider = new UrlTileProvider(512, 512) {@Overridepublic URL getTileUrl(int x, int y, int zoom) {/* Define the URL pattern for the tile images */Random random = new Random();String s = String.format(“http://mt”+random.nextInt(3)+”.google.cn/vt/lyrs=m@142&hl=zh-CN&gl=cn&x=%d&y=%d&z=%d&s=Galil”,x, y,zoom);if (!checkTileExists(x, y, zoom)) {return null;}try {return new URL(s);} catch (MalformedURLException e) {throw new AssertionError(e);}}};TileOverlayOptions tpo = new TileOverlayOptions();tpo.tileProvider(tileProvider);mapFragment.getMap().addTileOverlay(tpo);mapFragment.getMap().setMapType(GoogleMap.MAP_TYPE_NONE);mapFragment.getMapAsync(this);}(int x, int y, int zoom) {int minZoom = 12;int maxZoom = 16;if ((zoom < minZoom || zoom > maxZoom)) {return false;}return true;}(GoogleMap googleMap) {LatLng sydney = new LatLng(-33.867, 151.206);googleMap.setMyLocationEnabled(true);googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));googleMap.addMarker(new MarkerOptions().title(“Sydney”).snippet(“The most populous city in Australia.”).position(sydney));}}

不过经测试发现不知为何这种方法实现的图片质量有点低。。囧。。。

待续。。。

,感受不同地域不一样的节奏与表象。

Android 国内集成使用谷歌地图

相关文章:

你感兴趣的文章:

标签云: