首先最重要的当然是去官方下载相关的sdk文件,以及导入的项目中。再申请秘钥,不同APP不同的秘钥。这里不再做详细描述了。
- 当导入包以后,就是配置AndroidManifest.xml文件了,首先是需要相关权限,然后配置秘钥。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- 还有注册百度服务
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
<intent-filter>
<action android:name="com.baidu.location.service_v2.2" >
</action>
</intent-filter>
</service>
- 别忘了还要配置秘钥
<!-- meta-data需要写在application中 -->
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="这里填写你从百度地图官网申请到的秘钥" />
等导完包、配置完AndroidManifest.xml文件后就是进行代码的定位了
重中之中,需要在Activity绑定页面,也就是
setContentView(R.layout.main);
之前需要对百度sdk
进行注册,就是SDKInitializer.initialize(getApplicationContext());
这么一行代码,否则会报错。接下来就需要实例化百度地图定位非常关键的一个类LocationClient。
LocationClient mlocationClient = new LocationClient(getApplicationContext());
- 再使用LocationClientOption类对LocationClient进行一些属性的配置
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系
int span = 1000;
option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);// 可选,默认false,设置是否使用gps
option.setLocationNotify(true);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mlocationClient.setLocOption(option);//添加设置
- 最后就是定位的监听Listener,通过location就可以点出人任意想要的定位城市、经纬度等相关信息
BDLocationListener bdLocationListener = new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
Toast.makeText(MainActivity.this,
arg0.getLatitude() + "/" + arg0.getLongitude(), 100).show();
}
};
- 当然,还需要给定位类绑定监听才行
mlocationClient.registerLocationListener(bdLocationListener);
当然不能忘了要启动服务,我就是有一回忘了启动服务,纠结了很久,需要在OnStart()和OnDestory()方法中对定位服务分别启动与停止。代码如下:
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
//启动定位服务
if (!mlocationClient.isStarted()) {
mlocationClient.start();
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//停止定位服务
mlocationClient.stop();
}
- 完成。