这是腾讯的地图,如果你去用它的SDK它不会有这些图标的.它是为滴滴打车专门定制的这套东西.显示一些标志物,点一下能弹出相应的信息.
团购会有电影院的地址.地址的话我们看完之后还不知道怎么走.对它的印象也不是很深,你直接看可能对它不会有什么印象也不知道它在哪儿.
显示了一个二维的地图.然后还有放大缩小,左下角还有比例尺.比例尺它就显示了你当前在地球上这一段位置代表多远的一个距离.比如这一段长度代表的是500米,放大一下,这一段长度呢它代表的距离就小一点了,变成两百米了.如果你放的很大的话,它代表的距离会很小,10米.这个10米就说代表你在这地图上真实的一小段长度呢它就代表的是10米.
地图图层分类,可以切换成这个卫星地图.还有这个2D的一个地图.还有一个是交通图,交通图是用于显示我们这个交通路况的.比如说哪个地方拥堵啊,哪个地方比较畅通.
标志覆盖物是今天的一个重点.
学习第三方的SDK,有两种方式,一种是你直接看它的开发文档,也就是它的demo,它的小demo,你可以把它运行起来.
Android Tools->Fix Project Properties.
大多数这种第三方开发的SDK它都会需要一个Key.那这个Key怎么申请呢?看开发文档.
SHA1就是加密的一串字符串.跟我们的那个MD5一样,MD5它也是属于签名中的一种.这个SHA1是通过哈希算法算出来的.它比MD5要更加的严谨.
获取安全码:
一定要对着你这个安卓虚拟设备来找,因为有些人呢他可能在自己电脑配了两个SDK,两个SDK,那具体你这个Eclipse运行的时候他用的是哪一个SDK呢,那你就点一下这里,以这个为准.
要取这个debug.keystore的一个签名.这个是我们Eclipse默认运行apk的时候呢它用这个debug.keystore来签名的.它的密码默认是android.
只要你的电脑没换,Eclipse没换,那不论你打多少次这个命令,它的签名都会一模一样.最后生成的这个百度地图的Key,只能,如果说我是在我这里面通过这个指纹生成的,那只能在我的电脑里面去用,在你的电脑是用不了的.你们只能自己去再申请一个.
还需要一个包名,这个包名指的是我们清单文件AndroidManifest.xml里面的包名.进程会以这个指定的这个包名作为它进程的名字.
如果你用这个/BaiduMapsApiDemo/src/baidumapsdk.demo包名有点危险,因为我这里指定的这个包名可以跟这个/BaiduMapsApiDemo/src/baidumapsdk.demo完全不相同都是可以的.就是说我们最好是从/BaiduMapsApiDemo/AndroidManifest.xml这里面去选.
这个Key:3vPbgj0GeoFkyuaoL3HmRBVhLcagPt7p只能在我机器上运行它就没问题,因为我们生成这个key的时候呢是需要一个签名的,这个签名的话呢每个人在自己的电脑呢拿到的签名都不一样,所以这个Key呢你们只能自己去再申请一个.
这个项目运行会比较慢,因为这里面会有很多的.so库.这个就是通过JNI去调用.编译这些库花的时间会比较多.
如果说你这个Key是不对的,比如说你打错了一个字符,那这个地图它是不会显示出来的,它是不会给你提供这个地图服务的.
我们想自己去搭建开发环境,这个demo呢人家把环境都搭建好了,就是缺了一个Key而已.
那我们还是从0开始搭建这个开发环境.
配置环境及发布Android SDK:
armeabi是CPU的架构,最开始的时候这个百度地图只支持armeabi这个CPU的架构.现在呢它支持CPU的架构就非常多了.真实的开发应该是全部都拿,如果全部都拿一会儿编译会非常慢,所以我拿一个x86就行了.把它放到libs目录.
申请Key需要两个数据:一个是Android签名证书的sha1值(sha1是这样的一个指纹),一个是包名:baidumapsdk.demo.我们这个Eclipse运行的时候用的都是同一个debug.keystore,所以说这个签名肯定一样.你再去敲一下那个命令拿到的签名肯定一样.但是包名呢它就不同了,所以说这个key你不能用原来demo的那个key,必须重新去申请.
Hello BaiduMapAndroid SDK:
只要是阅读开发文档有红色的文字呢我们就需要去读一下,一定要读一下.因为红色比较重要.Application是在四大组件之前就初始化,在它们之前.也就是说我们应用最开始运行的时候呢它会先给你初始化这个Application,然后呢才是初始化这个Activity还有服务等等.既然人家建议我们这么做,那么我们就创建一个Application.
package com.itheima.baidumap74; //import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.MapView; import android.os.Bundle; import android.app.Activity; //import android.view.Menu; public class MainActivity extends Activity { private MapView mMapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 在使用SDK各组件之前初始化context信息,传入ApplicationContext // 注意该方法要再setContentView方法之前实现 // SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); } //Ctrl+I格式化 //这是百度地图规定的,它mMapView也有生命周期方法,你必须在Activity相应的生命周期方法里面呢去调mMapView对应的生命周期方法. //这个就没什么好记的了,死记硬背就行了.照着调用. @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } }
package com.itheima.baidumap74; import com.baidu.mapapi.SDKInitializer; import android.app.Application; //MyApplication也可以说是一个组件,既然是组件的话呢跟你那个四大组件一样是也需要配置的. public class MyApplication extends Application { @Override public void onCreate() {// 覆盖一个onCreate()方法,当这个组件MyApplication被运行的时候呢它首先会走这个onCreate // 进行一个创建. // TODO Auto-generated method stub // super.onCreate();//空实现,可以删除掉. // 在使用SDK各组件之前初始化context信息,传入ApplicationContext // 注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext());//把初始化SDK这个代码在MainActivity里面剪切掉,放到 //Application里面去完成 } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima.baidumap74" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name=".MyApplication"><!-- .就代表你前面这个基础的一个包 --> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="QaDs6ScFuwxGh75ku6gijqNnBhnXmNqZ" /> <!-- 下面这个activity也是一样,简单一点,以.打头就行了.这样看起来会比较简短一点,看起来会比较舒服. android:name="com.itheima.baidumap74.MainActivity" --> <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> </application> </manifest>
<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" > <!-- MapView是带包名的,说明这个View不是系统自带的View,是第三方的View.明显就是用于显示地图的叫MapView --> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </RelativeLayout>