这次我们试水高德LBS开放平台,
那么,什么是LBS?
基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息,在地理信息系统平台的支持下,为用户提供相应服务的一种增值业务。
简介下高德LBS开放平台:
Android 定位SDK最新版本为V2.8.0,包含全球定位功能。
Android 定位 SDK 是一套简单的LBS服务定位接口,您可以使用这套定位API获取定位结果、逆地理编码(地址文字描述)、以及地理围栏功能。
配置工程,申请Key:
http://lbs.amap.com/,注册账号并填写开发者信息,通过SHA1和包名获取key。
Key名称按命名规范来,
规范命名会让数据统计和数据分析更准确
建议命名方式: [应用名 + 应用场景]
如:神州专车-司机端;神州专车-Demo等
Package对应你应用的包名:
打开Android 应用工程的 AndroidManifest.xml配置文件,package 属性所对应的内容为应用包名。
SHA1的查看:
获取SHA1值
首先,绝大多数App在调试时使用的签名文件(debug keystore)和最终App发布使用的签名文件(自定义的keystore)是不同的,不同签名文件的SHA1值也是不同的。下面提供几种获取SHA1值的方式:
通过Eclipse编译器获取SHA1
使用 adt 22 以上版本,可以在 eclipse 中直接查看。
Windows:依次在 eclipse 中打开 Window -> Preferances -> Android -> Build。
Mac:依次在 eclipse 中打开 Eclipse/ADT->Preferances -> Android -> Build。
在弹出的 Build 对话框中 “SHA1 fingerprint” 中的值即为 Android 签名证书的 Sha1 值,如下图所示:
通过Android Studio编译器获取SHA1
第一步、打开Android Studio的Terminal工具<br/>
第二步、输入命令:keytool -v -list -keystore keystore文件路径<br/>
第三步、输入Keystore密码
使用 keytool(jdk自带工具)获取SHA1
1.运行进入控制台。
2.在弹出的控制台窗口中输入 cd .android 定位到 .android 文件夹。(我的路径为:C:\Users\car\.android\debug.keystore,仅供参考;最好的方法是全局搜索)
3.继续在控制台输入命令。
debug.keystore:命令为:keytool -list -v -keystore debug.keystore
自定义的 keystore:命令为:keytool -list -v -keystore apk的keystore
如下所示:
提示输入密钥库密码,编译器提供的debug keystore默认密码是 android,自定义签名文件的密码请自行填写。输入密钥后回车(如果没设置密码,可直接回车),此时可在控制台显示的信息中获取 SHA1 值,如下图所示:
说明:keystore 文件为 Android 签名证书文件。
添加高德 Key
<application
android:icon="@drawable/icon"
android:label="@string/app_name" >
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="请输入您的用户Key"/>
……
</application>
然后添加联网等相应权限,见demo。
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<!-- 请求网络 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 不是SDK需要的权限,是示例中的后台唤醒定位需要的权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 需要运行时注册的权限 -->
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--读取缓存数据-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 更改设置 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
代码混淆
3D 地图
-keep class com.amap.api.mapcore.**{*;}
-keep class com.amap.api.maps.**{*;}
-keep class com.autonavi.amap.mapcore.*{*;}
定位
-keep class com.amap.api.location.**{*;}
-keep class com.amap.api.fence.**{*;}
-keep class com.autonavi.aps.amapapi.model.**{*;}
搜索
-keep class com.amap.api.services.**{*;}
2D地图
-keep class com.amap.api.maps2d.**{*;}
-keep class com.amap.api.mapcore2d.**{*;}
导航
-keep class com.amap.api.navi.**{*;}
-keep class com.autonavi.**{*;}
接下来是自由开发时间~
第 1 步,配置AndroidManifest.xml
首先,声明Service组件
1
|
<service android:name=
"com.amap.api.location.APSService"
></service>
|
然后,声明权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!--用于进行网络定位-->
<uses-permission android:name=
"android.permission.ACCESS_COARSE_LOCATION"
></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name=
"android.permission.ACCESS_FINE_LOCATION"
></uses-permission>
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name=
"android.permission.ACCESS_NETWORK_STATE"
></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name=
"android.permission.ACCESS_WIFI_STATE"
></uses-permission>
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name=
"android.permission.CHANGE_WIFI_STATE"
></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name=
"android.permission.INTERNET"
></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name=
"android.permission.READ_PHONE_STATE"
></uses-permission>
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
></uses-permission>
|