百度地图——定位

来源:互联网 发布:is平台源码 编辑:程序博客网 时间:2024/06/07 09:44
 基础地图请查看Android百度地图API集成一《基础地图》: 地址http://www.cnblogs.com/dhr125/p/5969980.html.在Application标签中声明SERVICE组件<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service> <pre name="code" class="java"><!-- 这个权限用于进行网络定位--><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>
package com.example.baidumap;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;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.MapStatus;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;public class MainActivity extends AppCompatActivity {    private MapView mMapView;    private BaiduMap mBaiduMap;    private LocationClient mLocClient;    public MyLocationListenner myListener = new MyLocationListenner();    boolean isFirstLoc = true; // 是否首次定位    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //在使用SDK各组件之前初始化context信息,传入ApplicationContext          //注意该方法要再setContentView方法之前实现          SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.activity_main);        //获取地图控件引用          mMapView = (MapView) findViewById(R.id.bmapView);/************************************ 从这里开始是在locationdemo.java中复制的,然后根据报错,缺什么补什么   **************************************************************/        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) {            // 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()));            }        }        public void onReceivePoi(BDLocation poiLocation) {        }    }    @Override    protected void onDestroy() {        super.onDestroy();        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理          mMapView.onDestroy();    }    @Override    protected void onResume() {        super.onResume();        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理          mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理          mMapView.onPause();    }}


复制代码   以上,运行代码即可在地图上显示出你的当前位置  注意:如果,运行代码出现的是定位到一片蓝色的区域,当你将地图缩小后,会发现定位在海洋里或其他地方     1.检查各个步骤有没有错误,尤其是jar包,有没有引用     2.如果是模拟器,那就换成真机测试     3.如果是真机,检查手机系统是否是6.0及以上,如果是:在build.gradle中,将targetSdkVersion 改为22

0 0
原创粉丝点击