Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 移动开发 / Android / 基于Android实现百度地图定位过程详解

一、问题描述
LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位、地图、导航等,首先我们看如何基于百度地图实现定位功能
二、配置环境
1、注册密钥:地址http://developer.baidu.com/map/
2、下载定位SDK,并导入SDK如图所示:

 
三、编写MyApplication类
编写MyApplication类,为了使用方便我们可以将实现定位的方法封装的Application组件中
封装下列方法
1、  获取定位信息——requestLocationInfo()
2、  通过广播发送位置信息——sendBroadCast()
3、  停止定位——stopLocationClient()

public class MyApplication extends Application{public LocationClient mLocationClient = null;public GeofenceClient mGeofenceClient;public MyLocationListenner myListener = new MyLocationListenner();public static String TAG = "MyApplication";private static MyApplication mInstance = null;@Overridepublic void onCreate(){mInstance = this;mLocationClient = new LocationClient(this);/** * 项目的key,自己到官网申请 http://lbsyun.baidu.com/apiconsole/key */mLocationClient.setAK("你的应用Key");mLocationClient.registerLocationListener(myListener);mGeofenceClient = new GeofenceClient(this);super.onCreate();Log.d(TAG, "... Application onCreate... pid=" + Process.myPid());}public static MyApplication getInstance(){return mInstance;}/** * 停止定位 */public void stopLocationClient(){if (mLocationClient != null && mLocationClient.isStarted()){mLocationClient.stop();} }/** * 发起定位 */public void requestLocationInfo(){setLocationOption();if (mLocationClient != null && !mLocationClient.isStarted()){mLocationClient.start();}if (mLocationClient != null && mLocationClient.isStarted()){mLocationClient.requestLocation();} }/** * 设置百度地图的相关参数 */private void setLocationOption(){LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setServiceName("com.baidu.location.service_v2.9");option.setPoiExtraInfo(true);option.setAddrType("all");option.setPoiNumber(10);option.disableCache(true);mLocationClient.setLocOption(option);}/** * 监听函数,有更新位置的时候,格式化成字符串,输出到屏幕中 */public class MyLocationListenner implements BDLocationListener{@Overridepublic void onReceiveLocation(BDLocation location){if (location == null){sendBroadCast("定位失败!");return;}sendBroadCast(location.getAddrStr());}public void onReceivePoi(BDLocation poiLocation){if (poiLocation == null){sendBroadCast("定位失败!");return;}sendBroadCast(poiLocation.getAddrStr());}}/** * 得到发送广播 * @param address */public void sendBroadCast(String address){stopLocationClient();Intent intent = new Intent(MainActivity.LOCATION_BCR);intent.putExtra("address", address);sendBroadcast(intent);}}
三、 主程序MainActivity
public class MainActivity extends Activity{public static String TAG = "LocTestDemo";private BroadcastReceiver broadcastReceiver;public static String LOCATION_BCR = "location_bcr";private Button locBtn;private TextView locInfo;private MyApplication application;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);application=(MyApplication)super.getApplication();initialize();initializeViews();initializeListeners();}private void initialize(){registerBroadCastReceiver();//注册广播}private void initializeViews(){locBtn = (Button) findViewById(R.id.location);locInfo = (TextView) findViewById(R.id.location_info);}private void initializeListeners(){locBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){locInfo.setText("定位中...");//调用请求定位信息application.requestLocationInfo();}});}/** * 注册一个广播,监听定位结果,接受广播获得地址信息 */private void registerBroadCastReceiver(){broadcastReceiver = new BroadcastReceiver(){public void onReceive(Context context, Intent intent){String address = intent.getStringExtra("address");locInfo.setText(address);}};IntentFilter intentToReceiveFilter = new IntentFilter();intentToReceiveFilter.addAction(LOCATION_BCR);registerReceiver(broadcastReceiver, intentToReceiveFilter);}@Overrideprotected void onDestroy(){super.onDestroy();unregisterReceiver(broadcastReceiver);}}
四、 AndroidManifest.xml配置信息
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.jereh.baidulocation"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><applicationandroid:name="com.jereh.baidulocation.MyApplication"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.jereh.baidulocation.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><serviceandroid: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></application><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" ></uses-permission><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission><uses-permission android:name="android.permission.READ_PHONE_STATE" ></uses-permission><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" ></uses-permission><uses-permission android:name="android.permission.READ_LOGS" ></uses-permission><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /></manifest>