Android学习笔记(五七) 使用Google Map API v2

               

本笔记将学习如何使用Google Map服务。主要参考来源为:https://developers.google.com/maps/documentation/android/start?hl=zh-CN。要在模拟器和实际手机上跑通还是费了一番周折。最新的Google Maps Android API v2已经将map服务合并到Google Play services中,但是国内手机并不提供Google Play store,也不提供Google Play services。国内的手机是否不需要进行CTS测试?换言之,本次学习对于在国内市场提供应用并没有实际意义,因为你不可能要求用户去进行额外的安装,但是将学习手机应用如何使用互联网服务。要在手机上跑Google地图服务,涉及的步骤比较多。

一、准备开发环境

1、在Eclipse上安装Google Play Services SDK。位于extra,见下图。安装后位于sdk/extras/google/google_play_services/

2、安装SDK后,将Make a copy of the Google Play services的lib project拷贝到我们的workspace中,目的是为了在我们的project中可以引入该lib。在Eclise中File -> Import, 选择Android -> Existing Android Code into Workspace, 在SDK安装的目录下,选择该lib(google-play-services_lib),将其import。

3、要使我们的project可以使用google play service lib,是通用的将library project加入到Android project的操作,目地为了在开发的应用中使用来自lib project的共享代码。在Eclipse的包浏览(一般位于左侧)中,选择我们的项目,按右键-> Properties -> 在左边属处选择Android,在右边选择Library ->Project Selection 对话框中点击Add -> 从可选的lib project中选择目标。如下图

二、准备调测环境

无论采用模拟器还是真实手机作为调测环境,需要确保设备已经安装com.android.vending.apk(Google play store)和com.google.android.gms.apk(Google play services),然而模拟器上并没有包括这两个包,而国内手机也不包含着两个apk,这就是为何我在篇首感叹。要安装这个两个需要在网上进行search。需要注意com.google.andriod.gms.apk在2013年5月30有update。由于和Google在线提供的服务相关,这个包必须是最新,才能匹配现有的在线服务。在代码中可能进行检测:

GooglePlayServicesUtil.isGooglePlayServicesAvailable ( getApplicationContext() ) 

如果返回ConnectionResult: SUCCESS表示可以正常使用。其他可能返回有SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID。下面左图是SERVICE_MISSING,右图是SERVICE_VERSION_UPDATE_REQUIRED的情况,都不能正常使用Map业务。上面虽然有两个button,实际不起作用,估计是无法连接到服务器导致。据说小米手机的应用商店可以跳转到Google Play,可能小米和Google达成某些协议,可能小米手机上没有什么问题。

要安装这个apk时最为麻烦的。最后的解决办法是先在模拟器上先安装华为的智汇云,在上面查找这两个应用。由于应用来源不正规,所以不建议在真实手机上安装。模拟器上安装apk没有网上说的那么复杂,要进入adb shell处理。在模拟器上的浏览器直接打开相关的网页,下载apk,然后点击进行安装即可,和手机安装没区别。安装成功后,可以看到App增加了Google Settings和Play Store两个。

还有一个更为简单的方法。用gmail帐号登录,然后找到应用下载,在那里可以下载Google Map,官方版本比较安全。

2013.9.5补充:在模拟器上使用Google Map。我们下载了Google API后,为了确保这些API能在模拟器上正常使用,在创建AVD时,我们应该选择Google API来进行创建Target,就可以在模拟器中加入相关的功能,如下图所示,不需要额外去下载。

三、获取Google Map API的key

要通过Google Map API访问Google在线的地图服务,需要Google Map API Key。这个Key获取是免费的,开发者只要具有Gmail的邮箱就可。所有的Android app都必须由数字证书签发,开发者持有私有private key。由于数字证书是唯一的,作为应用的唯一标识,这是的应用商店可追踪你的应用,以及追踪你应用使用了Google Map服务。

Maps API key是基于应用的数字证书,也成为SHA-1 fingerprint。分为debug证书和release证书,对于我们的试验,使用debug。debug keystore文件位于~/.android/,如果是Windows位于C:\Users\your_user_name\.android\。Linux和用下面命令获得证书。在Windows中-keystore的参数为"C:\Users\your_user_name\.android\debug.keystore"。

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

Keytool 是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实 体(Key entity)-密钥(secret key)或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)-只包含公钥.
-list             显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码
-alias           产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
-keystore    指定keystore -file 指定导出的证书位置及证书名称
-storepass  密码
-keypass     指定密钥库的密码(获取keystore信息所需的密码)

记录下证书指纹,用它在Google APIs Console获取Map Key。Google API Console需要用Google帐号进行登录,也就是我们Gmail的帐号,这个网站貌似不是很稳定,有时请求需要发送多次才能成功,可能有间歇性拦截,反正多给点耐心吧。





OK,成功获取我们的Google Map API Key。

四、使用Google Map服务

经过以上步骤,终于将整个开发环境准备好,进入代码编写阶段。在coding的具体编写前,首先要AndroidManifest.xml中设置相应的许可,具体如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.wei.android.beginning" android:versionCode="1"   android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="14"  android:targetSdkVersion="17" />
    <!-- 步骤(1)设置Google Map API v2 Key,其中com.wei.android.beginning为package的名字 -->
    <permission android:name="com.wei.android.beginning.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
    <uses-permission android:name="com.wei.android.beginning.permission.MAPS_RECEIVE"/>

    <!-- 步骤(3)设置使用Google Map服务所需的许可 -->
    <uses-permission android:name="android.permission.INTERNET" />  <!-- Google Map是互联网业务,允许互联网 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许API检查网络连接状态,已确定是否可以下载数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 允许将Google地图数据缓存在SD卡上 -->
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/><!-- 允许API访问Google的基于Web的业务 -->   
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  <!-- 地图应用经常和定位相关,允许粗定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>   <!-- 允许精确定位-->    
    <!-- 步骤(4)Google Map v2需要OpenGL ES,需要用uses-feature中声明 -->
    <uses-feature android:glEsVersion="0x00020000"  android:required="true"/>
  
    <application ...... >   
        <!-- 步骤(2)设置Google Map API v2 Key -->
        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDPOviDLcwanPb3D3rwdqYXFn8jikGXey0"/>       
        <activity ......>  ...... </activity>
    </application>
</manifest>

使用最为简单的的例子,在Activitiy中简单的显示提出。在Activitiy引用的layout.xml文件如下:

<?xml version="1.0" encoding="utf-8"?><fragment xmlns:android="http://schemas.android.com/apk/res/android"          android:id="@+id/map"          android:layout_width="match_parent"          android:layout_height="match_parent"          android:name="com.google.android.gms.maps.MapFragment"/>

只要在activity中,将该布局引入即可。

public class MainActivity extends Activity {    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }}

费了好大劲,要show一下成果。显示经度为0,维度为0的地区,请看非洲……

相关链接: 我的Android开发相关文章
           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值