上一个博客已经写完获取SHA1值后生成的value值了
首先第一步,把从百度地图文档中下载定位的相关的库,放在libs中
第二步: 在AndroidManifest中添加
1:<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="申请的value"> </meta-data>
2: <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" />3: 权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> //读取设备硬件信息,统计数据 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> //读取系统信息,包含系统版本等信息,用作统计 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> //获取设备的网络状态,鉴权所需网络代理 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //允许sd卡写权限,需写入地图数据,禁用后无法显示地图 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> //获取统计数据 <uses-permission android:name="android.permission.GET_TASKS" /> //鉴权所需该权限获取进程列表 <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
第三步:在build.gradle里添加上这句话
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
第四步:在你的Application 的oncreat里添加
SDKInitializer.initialize(getApplicationContext());第五步:把百度文档中的实例代码
LocationService,拿来参考使用
package com.elkc.myapplication.util; import android.content.Context; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.LocationClientOption.LocationMode; /** * * @author baidu * */ public class LocationService { private LocationClient client = null; private LocationClientOption mOption,DIYoption; private Object objLock = new Object(); /*** * * @param locationContext */ public LocationService(Context locationContext){ synchronized (objLock) { if(client == null){ client = new LocationClient(locationContext); client.setLocOption(getDefaultLocationClientOption()); } } } /*** * * @param listener * @return */ public boolean registerListener(BDLocationListener listener){ boolean isSuccess = false; if(listener != null){ client.registerLocationListener(listener); isSuccess = true; } return isSuccess; } public void unregisterListener(BDLocationListener listener){ if(listener != null){ client.unRegisterLocationListener(listener); } } /*** * * @param option * @return isSuccessSetOption */ public boolean setLocationOption(LocationClientOption option){ boolean isSuccess = false; if(option != null){ if(client.isStarted()) client.stop(); DIYoption = option; client.setLocOption(option); } return isSuccess; } public LocationClientOption getOption(){ return DIYoption; } /*** * * @return DefaultLocationClientOption */ public LocationClientOption getDefaultLocationClientOption(){ if(mOption == null){ mOption = new LocationClientOption(); mOption.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 mOption.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll; mOption.setScanSpan(3000);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 mOption.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 mOption.setIsNeedLocationDescribe(true);//可选,设置是否需要地址描述 mOption.setNeedDeviceDirect(false);//可选,设置是否需要设备方向结果 mOption.setLocationNotify(false);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 mOption.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 mOption.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” mOption.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 mOption.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 mOption.setIsNeedAltitude(false);//可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用 } return mOption; } public void start(){ synchronized (objLock) { if(client != null && !client.isStarted()){ client.start(); } } } public void stop(){ synchronized (objLock) { if(client != null && client.isStarted()){ client.stop(); } } } public boolean requestHotSpotState(){ return client.requestHotSpotState(); } }
使用:
locationService = new LocationService(getContext()); //获取locationservice实例,建议应用中只初始化1个location实例,然后使用,可以参考其他示例的activity,都是通过此种方式获取locationservice实例的 locationService.registerListener(mListener); locationService.start();
private BDLocationListener mListener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { if (null != location && location.getLocType() != BDLocation.TypeServerError) { String city = location.getCity(); Log.d("城市",city); textLocation.setText(city); } } };
location可以获取经纬度,城市,地址的具体方法
记录问题
over