1.有关高德开放平台的审核工作
首先就是要注册账号,分为个人开发者和企业开发者两种身份,企业开发者审核期为三天,权限和服务也会更多。然后创建自己的应用,填写信息,如下:
有关SHA1等信息可以在项目里面查看:
点击Preferences
这里有两个keystore,一个是debug版本的,另一个是release版本的,有关keystore文件的生成请点击:传送门
然后把release的keystore信息填写到高德上就可以得到一个key值了。接下来就是要写代码了
2.项目配置
添加jar包
从官网上面下载jar包等开发工具,然后导入到项目的libs文件夹下面(eclipse),然后右击,如图所示:
接下来需要配置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
17
18
19
20
21
|
<!--用于进行网络定位-->
<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>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name=
"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name=
"android.permission.BLUETOOTH"
></uses-permission>
<uses-permission android:name=
"android.permission.BLUETOOTH_ADMIN"
></uses-permission>
|
接下来需要在org.cocos2dx.lua.AppActivity里面添加初始代码(由于这是一个获取位置的小Demo,目前只有满足需求的部分代码,后续增加功能的话,其余功能代码会陆续加上来)
先贴上代码:
下面是有关定位模式的信息:
选择定位模式
1
2
|
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
|
1
2
|
//设置定位模式为AMapLocationMode.Battery_Saving,低功耗模式。
mLocationOption.setLocationMode(AMapLocationMode.Battery_Saving);
|
1
2
|
//设置定位模式为AMapLocationMode.Device_Sensors,仅设备模式。
mLocationOption.setLocationMode(AMapLocationMode.Device_Sensors);
|
设置单次定位
1
2
3
4
5
6
7
8
9
|
//获取一次定位结果:
//该方法默认为false。
mLocationOption.setOnceLocation(
true
);
//获取最近3s内精度最高的一次定位结果:
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
mLocationOption.setOnceLocationLatest(
true
);
}
|
自定义连续定位
1
2
|
//设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。
mLocationOption.setInterval(
1000
);
|
其他参数
1
2
|
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(
true
);
|
1
2
|
//设置是否强制刷新WIFI,默认为true,强制刷新。
mLocationOption.setWifiActiveScan(
false
);
|
1
2
|
//设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(
false
);
|
1
2
|
//单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。
mLocationOption.setHttpTimeOut(
20000
);
|
1
2
|
//关闭缓存机制
mLocationOption.setLocationCacheEnable(
false
);
|
启动定位
1
2
3
4
|
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();
|
获取定位结果
实现监听器
1
2
3
4
5
6
7
8
|
//可以通过类implement方式实现AMapLocationListener接口,也可以通过创造接口类对象的方法实现
//以下为后者的举例:
AMapLocationListener mAMapLocationListener =
new
AMapLocationListener(){
@Override
public
void
onLocationChanged(AMapLocation amapLocation) {
}
}
|
解析AMapLocation对象
1
2
3
4
5
6
7
8
9
10
|
if
(amapLocation !=
null
) {
if
(amapLocation.getErrorCode() ==
0
) {
//可在其中解析amapLocation获取相应内容。
}
else
{
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e(
"AmapError"
,
"location Error, ErrCode:"
+ amapLocation.getErrorCode() +
", errInfo:"
+ amapLocation.getErrorInfo());
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
amapLocation.getLocationType();
//获取当前定位结果来源,如网络定位结果,详见定位类型表
amapLocation.getLatitude();
//获取纬度
amapLocation.getLongitude();
//获取经度
amapLocation.getAccuracy();
//获取精度信息
amapLocation.getAddress();
//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
amapLocation.getCountry();
//国家信息
amapLocation.getProvince();
//省信息
amapLocation.getCity();
//城市信息
amapLocation.getDistrict();
//城区信息
amapLocation.getStreet();
//街道信息
amapLocation.getStreetNum();
//街道门牌号信息
amapLocation.getCityCode();
//城市编码
amapLocation.getAdCode();
//地区编码
amapLocation.getAoiName();
//获取当前定位点的AOI信息
amapLocation.getBuildingId();
//获取当前室内定位的建筑物Id
amapLocation.getFloor();
//获取当前室内定位的楼层
amapLocation.getGpsStatus();
//获取GPS的当前状态
//获取定位时间
SimpleDateFormat df =
new
SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"
);
Date date =
new
Date(amapLocation.getTime());
df.format(date);
|
最后一步,停止定位
停止定位
1
|
mLocationClient.stopLocation();
//停止定位后,本地定位服务并不会被销毁
|
销毁定位客户端
1
|
mLocationClient.onDestroy();
//销毁定位客户端,同时销毁本地定位服务。
|
获取的结果如下: