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

PS:高德SDK已经支持显示国外的地图了,不想折腾的可以直接使用高德吧☺

使用 Google Maps Android API v2

使用谷歌提供的SDK,Android Studio开发。
  1. 首先保证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文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="map.randy.com.googlemapdemo" ><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"/><!-- The following two permissions are not required to useGoogle 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"/><uses-feature
        android:glEsVersion="0x00020000"android:required="true"/><application
        android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activity
            android:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><meta-data
            android:name="com.google.android.gms.version"android:value="@integer/google_play_services_version" /><meta-data
            android:name="com.google.android.maps.v2.API_KEY"android:value="*API_KEY*"/></application>
</manifest>

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextView
        android:text="@string/hello_world"android:layout_width="wrap_content"android:layout_height="wrap_content" /><fragment
        android:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"android:name="com.google.android.gms.maps.MapFragment"/>
</RelativeLayout>

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;public class MainActivity extends FragmentActivity implements OnMapReadyCallback {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);mapFragment.getMapAsync(this);}@Overridepublic void onMapReady(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;public class MainActivity extends FragmentActivity implements OnMapReadyCallback {@Overrideprotected void onCreate(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);}private boolean checkTileExists(int x, int y, int zoom) {int minZoom = 12;int maxZoom = 16;if ((zoom < minZoom || zoom > maxZoom)) {return false;}return true;}@Overridepublic void onMapReady(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 国内集成使用谷歌地图相关推荐

  1. android调用最新的谷歌地图方法

    国内开发环境确实很悲催,无法谷歌,所以本来调用集谷歌自家的服务于一身的android内部api有意见很简单的事儿,变成了一项挑战! 最近项目中设计国外用户,有些心得,现在给出在国内来调用谷歌地图.定位 ...

  2. android auto只能用谷歌地图吗,Android Auto获得导航、停车、充电等多方面新应用支持...

    得益于谷歌的进一步开放,Android Auto 正获得一系列新的应用支持,涵盖导航.停车.充电等等.这些应用程序有包括为电动汽车和插电混动汽车的 Chargepoint 和 PlugShare,导航 ...

  3. android 地图标记旋转,在谷歌地图中旋转标记/汽车图标 – Android

    我正在尝试像ola / uber这样的应用程序.我想移动图标并在道路左转或右转时旋转.我正在使用以下代码. private void rotateMarker(final Marker marker, ...

  4. android auto只能用谷歌地图吗,谷歌独立车载系统 新版Android Auto无需汽车兼容

    据报道,谷歌今年将开发独立车载系统,新版Android Auto无需汽车兼容便能自行运作,而第一部搭载汽车版安卓的车辆,将在明年上市,如果汽车版安卓开发成功,那么谷歌就很有可能成为车载硬件操作系统的新 ...

  5. Android GoogleMap 谷歌地图从零开始

    说明 由于国内使用v2最新的谷歌地图有很多限制,所有如果要在真机上测试运行要做一些准备  准备1:  vpn必不可少啦 推荐cloud vpn或者betternet都是不错的免费vpn  准备2:  ...

  6. android auto谷歌地图,如何在 Android Auto 中使用 Waze 而不是谷歌地图

    玩懂手机网教程,随着有车一族的用户越来越庞大,Android 独家应用程序比 iOS 少的多,大部分用户依旧使用智能手机进行导航,对比起来 Android Auto 正在面临一个逐步两难的境界. An ...

  7. Android项目集成谷歌账户登录

    在做国外项目的时候,许多需要集成谷歌账户登录功能. 集成谷歌登录后,能直接调用谷歌的账户登录界面进行登录操作(包括注册新用户.忘记密码等),同时会把账户信息保存到设备的account manager中 ...

  8. 【谷歌地图--DirectionsSDK集成】

    上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性.这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助: [谷歌地图–集成准备] [谷歌地图–MapsSDK ...

  9. 基于Android的谷歌地图地理围栏功能开发

    第一步.Android使用谷歌地图权限 Android上使用谷歌地图 必备条件:翻墙.Android设备上安装Google Play Service 由于谷歌在国内已经被墙了,所以我们只能使用翻墙软件 ...

  10. 【谷歌地图--MapsSDK集成】

    上网查了一些资料发现有关谷歌地图sdk集成的文章还是不少的,但是都缺乏系统性.这里做些系统整理,主要分以下篇幅讲解,希望对初始谷歌地图的你有所帮助: [谷歌地图–集成准备] [谷歌地图–MapsSDK ...

最新文章

  1. 2017年5个最佳网络监控工具 你知道哪些
  2. python turtle调整画布宽高_turtle.screensize改变不了窗口大小?
  3. 2017微服务 mysql集群_成功升P7多亏掌握了这几点:高并发+Nginx+微服务+Redis+MySQL...
  4. activemq 安全连接
  5. Java 10 常用集合继承关系图
  6. 关于直播视频平台与监控视频平台技术架构方案
  7. maya 替换名称_maya替换对象,MAYA
  8. ASP.NET 学习日志
  9. 优质编程网站推荐(适合学习和查资料)
  10. python两个下划线怎么打_Python中单下划线与双下划线用法总结
  11. win10显示文件后缀
  12. Nepire的校OJ入门题解—17蓝桥选拔篇(二)
  13. C# 微信支付请求分账
  14. CSS简单实现一个箭头
  15. 补充学习2021.7.21—动态水波进度条
  16. 欧美风相册PPT模板
  17. matlab升幂降幂排列,升幂排列与降幂排列
  18. 山澤損 (易經大意 韓長庚)
  19. wince 蓝牙 --转载
  20. 投影坐标系的shp数据,如何获取到它地理坐标系下的经纬度坐标

热门文章

  1. 摄影知识——光圈和快门的组合
  2. Flink SQL Size of the state is larger than the maximum permitted memory-backed state
  3. Chrome 中的自动播放策略如何设置自动播放
  4. linux cups网络打印机,基于CUPS的网络打印服务器
  5. WIN10设置自动拨号联网任务,实现开机、断网自动重连
  6. HBase MapReduce MultiTableInput首次测试
  7. WPF - Visual调试工具Snoop
  8. C++根据三个点坐标计算夹角
  9. yolo3加载自己训练的模型出现NameError: name 'yolo_head' is not defined
  10. Linux 驱动 IIC_MPU6050