您的位置:首页 > 其它

定位 -- 百度地图SDK

2016-06-01 21:36 429 查看
 要使用百度地图定位 ,首先需要注册百度账号,和申请 AppKey  所需的jar包是locSDK_6.13.jar 和baidumapapi_v3_5_0.jar级armeabi

 在清单列表中进行如下配置:

 <!-------------manifest------------->

  <!-- 百度地图权限 -->

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />

    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-permission android:name="android.permission.GET_TASKS" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <!-- 这个权限用于进行网络定位 -->

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >

    </uses-permission>

    <!-- 这个权限用于访问GPS定位 -->

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >

    </uses-permission>

    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >

    </uses-permission>

    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >

    </uses-permission>

    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->

    <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" />

    <!-- SD卡读取权限,用户写入离线定位数据 -->

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >

    </uses-permission>

   在application中进行配置:

   

        <!-- 百度地图appkey -->

        <meta-data

            android:name="com.baidu.lbsapi.API_KEY"

            android:value="tObatmG4iwEl7FmPd0Owljxglx8NZ8NQ" />

        <!-- 单独的定位service -->

        <service

            android:name="com.baidu.location.f"

            android:enabled="true"

            android:process=":remote" >

        </service>

  主Activity main中

   import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.support.v7.app.ActionBarActivity;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.RadioGroup;

import android.widget.RadioGroup.OnCheckedChangeListener;

import android.widget.TextView;

import com.baidu.location.Address;

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.MapStatus;

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;

    private static final int accuracyCircleFillColor = 0xAAFFFF88;

    private static final int accuracyCircleStrokeColor = 0xAA00FF00;

    MapView mMapView;

    BaiduMap mBaiduMap;

    // UI相关

    OnCheckedChangeListener radioButtonListener;

    TextView requestLocButton;

    boolean isFirstLoc = true; // 是否首次定位

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext

        // 注意该方法要再setContentView方法之前实现

        SDKInitializer.initialize(getApplicationContext());

        setContentView(R.layout.activity_main);

        requestLocButton = (TextView) findViewById(R.id.button1);

        mCurrentMode = LocationMode.NORMAL;

    

        

         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() {

            @Override

            public void onCheckedChanged(RadioGroup group, int checkedId) {

                if (checkedId == R.id.defaulticon) {

                    // 传入null则,恢复默认图标

                    mCurrentMarker = null;

                    mBaiduMap

                            .setMyLocationConfigeration(new MyLocationConfiguration(

                                
4000
    mCurrentMode, true, null));

                }

                if (checkedId == R.id.customicon) {

                    // 修改为自定义marker

                    mCurrentMarker = BitmapDescriptorFactory

                            .fromResource(R.drawable.icon_geo);

                    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); // 打开gps

        option.setCoorType("bd09ll"); // 设置坐标类型

        option.setScanSpan(1000);

        mLocClient.setLocOption(option);

        mLocClient.start();

        

    }

    /**

     * 定位SDK监听函数

     */

    public class MyLocationListenner implements BDLocationListener {

        @Override

        public void onReceiveLocation(BDLocation location) {

            String country = location.getCountry();

            String city = location.getCity();

            String district = location.getDistrict();

            String street = location.getStreet();

            Address address = location.getAddress();

            double longitude = location.getLongitude();

            Log.i("main",country+city+district+street+longitude);

            

            // 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());

                MapStatus.Builder builder = new MapStatus.Builder();

                builder.target(ll).zoom(18.0f);

                mBaiduMap.animateMapStatus(MapStatusUpdateFactory

                        .newMapStatus(builder.build()));

            }

             Log.d("hhhhhhhh",location.getCountry()+"=="+location.getLatitude()+"=="+location.getLongitude());

        

             

        

        }

        public void onReceivePoi(BDLocation poiLocation) {

            Log.d("main",poiLocation+"");

        

        }

    }

    @Override

    protected void onPause() {

        mMapView.onPause();

        super.onPause();

    }

    @Override

    protected void onResume() {

        mMapView.onResume();

        super.onResume();

    }

    @Override

    protected 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" >

   <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>

  

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: