使用百度地图SDK实现定位功能,定位你当前的位置

来源:互联网 发布:java设计模式书籍 知乎 编辑:程序博客网 时间:2024/05/18 07:50

1、首先需要下载百度地图官方SDK

官方文档: http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3

2、将sdk中相关文件复制到对应的目录下(所有的.jar文件以及整个armeabi文件夹复制到工程的libs目录下)

3、接着你就可以使用百度地图所有相关功能了

---下面介绍使用百度地图SDK实现定位功能


首先在清单文件中添加权限和appkey

---权限

<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_WIFI_STATE" />  <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.WRITE_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.INTERNET" />  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  <uses-permission android:name="android.permission.READ_LOGS" />  


---appkey

将你在百度开发平台上申请的key替换即可,注意在application中添加,和activity同级

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="申请的appkey" />


布局xml文件中代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.test.MainActivity" >    <com.baidu.mapapi.map.MapView        android:id="@+id/bmapView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:clickable="true" />    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_marginTop="80dip"        android:background="#D000"        android:minWidth="100dip"        android:orientation="vertical"        android:padding="2dp" >        <RadioGroup            android:id="@+id/radioGroup"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:contentDescription="定位icon" >            <RadioButton                android:id="@+id/defaulticon"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:checked="true"                android:text="默认图标" >            </RadioButton>            <RadioButton                android:id="@+id/customicon"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="自定义图标" >            </RadioButton>        </RadioGroup>        <Button             android:id="@+id/poisearch"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:onClick="poiSearch"            android:text="周边检索"/>    </LinearLayout>    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_alignParentTop="true"        android:layout_marginRight="25dp"        android:layout_marginTop="10dip" /></RelativeLayout>

Activity中的代码

import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RadioGroup;import android.widget.Toast;import android.widget.RadioGroup.OnCheckedChangeListener;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;public class MainActivity extends Activity {// 定位相关LocationClient mLocClient;public MyLocationListenner myListener = new MyLocationListenner();private LocationMode mCurrentMode;BitmapDescriptor mCurrentMarker;MapView mMapView;BaiduMap mBaiduMap;// UI相关OnCheckedChangeListener radioButtonListener;Button requestLocButton;boolean isFirstLoc = true;// 是否首次定位    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.activity_main);        requestLocButton = (Button) findViewById(R.id.button1);        mCurrentMode = LocationMode.NORMAL;        requestLocButton.setText("普通");        OnClickListener btnClickListener = new OnClickListener() {            public void onClick(View v) {                switch (mCurrentMode) {                    case NORMAL:                        requestLocButton.setText("跟随");                        mCurrentMode = LocationMode.FOLLOWING;                        mBaiduMap                                .setMyLocationConfigeration(new MyLocationConfiguration(                                        mCurrentMode, true, mCurrentMarker));                        break;                    case COMPASS:                        requestLocButton.setText("普通");                        mCurrentMode = LocationMode.NORMAL;                        mBaiduMap                                .setMyLocationConfigeration(new MyLocationConfiguration(                                        mCurrentMode, true, mCurrentMarker));                        break;                    case FOLLOWING:                        requestLocButton.setText("罗盘");                        mCurrentMode = LocationMode.COMPASS;                        mBaiduMap                                .setMyLocationConfigeration(new MyLocationConfiguration(                                        mCurrentMode, true, mCurrentMarker));                        break;                    default:                        break;                }            }        };        requestLocButton.setOnClickListener(btnClickListener);RadioGroup group = (RadioGroup) this.findViewById(R.id.radioGroup);radioButtonListener = new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {if (checkedId == R.id.defaulticon) {// 传入null则,恢复默认图标mCurrentMarker = null;mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, null));}if (checkedId == R.id.customicon) {// 修改为自定义markermCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));}}};group.setOnCheckedChangeListener(radioButtonListener);// 地图初始化mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap = mMapView.getMap();// 开启定位图层mBaiduMap.setMyLocationEnabled(true);// 定位初始化mLocClient = new LocationClient(this);mLocClient.registerLocationListener(myListener);LocationClientOption option = new LocationClientOption();option.setOpenGps(true);// 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);mLocClient.setLocOption(option);mLocClient.start();}/** * 定位SDK监听函数 */public class MyLocationListenner implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            // map view 销毁后不在处理新接收的位置            if (location == null || mMapView == null) {                return;            }            MyLocationData locData = new MyLocationData.Builder()                    .accuracy(location.getRadius())                            // 此处设置开发者获取到的方向信息,顺时针0-360                    .direction(100).latitude(location.getLatitude())                    .longitude(location.getLongitude()).build();            mBaiduMap.setMyLocationData(locData);            if (isFirstLoc) {                isFirstLoc = false;                LatLng ll = new LatLng(location.getLatitude(),                        location.getLongitude());                MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);                mBaiduMap.animateMapStatus(u);            }        }public void onReceivePoi(BDLocation poiLocation) {}}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {// 退出时销毁定位mLocClient.stop();// 关闭定位图层mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroy();}}-----<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.test.MainActivity" >    <com.baidu.mapapi.map.MapView        android:id="@+id/bmapView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:clickable="true" />    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_marginTop="80dip"        android:background="#D000"        android:minWidth="100dip"        android:orientation="vertical"        android:padding="2dp" >        <RadioGroup            android:id="@+id/radioGroup"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:contentDescription="定位icon" >            <RadioButton                android:id="@+id/defaulticon"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:checked="true"                android:text="默认图标" >            </RadioButton>            <RadioButton                android:id="@+id/customicon"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="自定义图标" >            </RadioButton>        </RadioGroup>    </LinearLayout>    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_alignParentTop="true"        android:layout_marginRight="25dp"        android:layout_marginTop="10dip" /></RelativeLayout>

这样就实现定位当前位置啦!!!


0 0