• Google Map API v2 步步为营(一) ----- 初见地图


    官方文档:https://developers.google.com/maps/documentation/android/start?hl=zh-CN

    先谷歌后百度。使用google的api基本上按照官网来就好了,开发过程中遇到各种各样的问题,其实仔细看官方文 都能找到解决方法的。这篇文主要是让自己回顾总结一下。

    Google Map API v2 相对v1变化了不少,千万别拿着v1的攻略做v2。

    step1  准备工作:

    1,需要安装两个东西,Google Play services SDK 和 Google APIs。

    打开Android SDK Manager,拖到最底下找到Extras文件夹,展开,找到Google Play services,安装。

    Google Play services 将安装到android SDK path下,我的目录是~/develop/android-sdk-linux/extras/google/google_play_services/

    我用的是API 15(4.0.3),到对应的目录下展开,安装Google APIs。

    2,导入Google Play services

    File > Import,  选择Android > Existing Android Code into Workspace,找到

    ~/develop/android-sdk-linux/extras/google/google_play_services/libproject/google-play-services_lib/。

    导入之后在eclipse里就能看到google-play-services_lib工程,如果eclipse里设置了build automatically,就会自动编译,要确保gen目录下有生成com.google.android.gms这个包,否则后面的步骤会报错。

    3,按正常步骤建立自己的android project,把google-play-services_lib加入到Dependencies的库中。

    在左边的Package Expolorer视窗中找到自己的project,鼠标右键,选择Properties,左边导航栏选Android,右边子窗口里找到Library,点Add,打开project selection窗口,选择google-play-services_lib,点Ok。

     

     加入后

    点OK。

    回到工作区,包目录下可以看到多了两个dependence的包

    4,调试环境

    手机上需要安装Google服务包(com.google.android.gms.apk)和Google Play Store(com.android.vending.apk)。

    我没装google服务的framework,play store其实是用不了的,但是并不影响Google Map的使用。

    如果使用模拟器,创建AVD的时候 target选择对应API level的Google APIs就行了。

    准备工作结束。

    step 2 申请KEY

    使用google的东西都必须申请一个KEY,这个KEY是和 APK的包名 及 打apk包时所用的证书 绑定的。

    1,先安装keytool

    eclipse->Help->Install New Software,点Add,Name填写Keytool,Loction填http://www.keytool.sourceforge.net/update ,安装完成重启eclipse,菜单栏上多了Keytool菜单。

    2,找到证书的SHA1

    调试阶段通过eclipse的run和debug打包的apk,都是使用默认的debug证书,这个证书的位置在home目录的.android目录下。

    eclipse->Keytool->Open keystore,文件路径输入/home/用户名/.android/debug.keystore,密码是debug证书的默认密码android

    打开后窗口底部出现keytool视窗,列出刚刚选择的keystore,展开,双击打开androiddebugkey,找到SHA1 Fingerprint 复制下来。

    也可以通过命令行查看key,keytool的命令行操作参考http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html

    3, 登陆Google APIs Console,创建KEY

    用gmail账号登陆https://code.google.com/apis/console/?noredirect,新建一个project,左边导航视窗中选择Services,第一次加载可能会比较慢。

    加载完后,右边窗口会出现google提供的所有服务,找到Google Maps Android API v2,把后面的trigger设置成ON,然后出现的各种协议选择accept。

    导航视窗中选择API Access。点击按钮Create Android Key,弹出窗口中填写 “SHA1;包名”,create成功,返回API Access窗口就能看到Key for Android apps,把API key栏的一串字符复制下来。

    step 3 可以开始codding了

    1,修改manifest

    回到eclipse,打开AndroidManifest.xml,在<manifest>根节点中设置地图访问许可

    <!-- google map needed -->
    <permission
       android:name="com.xxx.xxx.permission.MAPS_RECEIVE"
       android:protectionLevel="signature"/> 
    <uses-permission android:name="com.xxx.xxx.permission.MAPS_RECEIVE"/>
    <!-- google map needed -->

    com.xxx.xxx是包名,注意这两句要加在<application></application>外面

    其他需要的许可

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 精确位置服务 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 位置服务 -->
    <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"/> <!-- 写sd卡 google地图会往sd卡上写缓存数据-->
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <!-- 允许访问google的web服务 -->
    <uses-feature 
            android:glEsVersion="0x00020000"
            android:required="true"/>

    申明要使用OpenGL ES,这一项是为了让不支持OpenGL的机器访问play store的时候略过这个apk。不写这一项也不影响调试。

    在<application></application>节点中增加两个元数据:

    <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="@string/GOOGLE_MAP_API_KEY"/>

    res/values/config.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <resources>
        <string translatable="false" name="GOOGLE_MAP_API_KEY">上一步中复制出来的API KEY</string>
        
    </resources>

    GOOGLE_MAP_API_KEY 的值就是step 2.3中申请的key。

    2,MapsActivity.java

    layout/map.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 
     3 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6     >
     7     <fragment 
     8         android:id="@+id/map_view"
     9         android:layout_width="match_parent"
    10         android:layout_height="match_parent"
    11         android:name="com.google.android.gms.maps.MapFragment"/>
    12 
    13     <RelativeLayout android:id="@+id/debug"
    14         android:layout_width="wrap_content"
    15         android:layout_height="wrap_content"
    16         >
    17         
    18     <TextView android:id="@+id/debug_loc_marked"
    19         android:layout_width="wrap_content"
    20         android:layout_height="wrap_content"
    21         android:textColor="#f00"
    22         android:text="debug_loc_marked"
    23         android:layout_marginTop="0dip" />
    24     
    25     <TextView android:id="@+id/debug_loc_my"
    26         android:layout_width="wrap_content"
    27         android:layout_height="wrap_content"
    28         android:textColor="#f00"
    29         android:text="debug_loc_my"
    30         android:layout_below="@id/debug_loc_marked" />
    31     </RelativeLayout>
    32 </FrameLayout>

    重点在7~11行,v2的地图是用Fragment来显示的

    13~31行是两个用于调试的textview,显示标记所在的经纬度,及当前位置经纬度。

    MapsActivity.java

    先给一个简化版

    public class MapsActivity extends Activity{
    
      public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);
      }
    }

    OK,run一下

     本篇结束。上图中mark和地址获取需要额外的代码,下一篇进阶篇中再继续整理。

  • 相关阅读:
    万字总结:学习MySQL优化原理,这一篇就够了!
    sql中自连接的使用
    SQL 优化原则
    Thumbnailator java图片压缩,加水印,批量生成缩略图
    java使用Thumbnailator处理图片
    Mysql优化原则_小表驱动大表IN和EXISTS的合理利用
    MySQL千万级多表关联SQL语句调优
    了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表
    【explain】MySQL联表查询中的驱动表
    pyCharm最新2018激活码
  • 原文地址:https://www.cnblogs.com/inkheart0124/p/3535243.html
Copyright © 2020-2023  润新知