• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

Android

android中百度舆图定位的实现要领

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0523/503.html

android中百度舆图定位的实现要领(仅适用于真机+WIFI联网情况)

留意:此代码的情况是:真机(体系版本为Android4.2.2)+WIFI联网(才能实现末了的运行后果);运用假造机调试会出现种种问题。

第一步:下载SDK和请求Key

到百度的网站http://developer.baidu.com/map/

 

第二步:而后选定SDK下载。(根据必要下载必要的SDK)

 

第三步:请求key

http://developer.baidu.com/map/index.php?title=androidsdk

 

而后选定建立运用

 

必要填写:运用称号和数字署名(SHA1)和包名

 

运用称号即是:

 

数字署名:

 

菜单栏中的window--------->Preferences---------->Build

 

包名:

 

填进入以后就会自动生成。

 

生成一个走访AK,这个AK,必然要记着。

 

第四步:编码

《1》建设文件manifest.xml中加上权限

复制代码
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

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

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

<usespermissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/> 

<usespermissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> 

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

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

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

<uses-permission android:name="android.permission.ACCESS_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.BROADCAST_STICKY" /> 

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
复制代码

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

而后把刚才请求的key加上去:

<meta-data 

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

       android:value="你请求的key" />

 

 

而后在加上

复制代码
<service

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

    android:enabled="true"

    android:process=":remote" >

</service>
复制代码

 

 

《2》结构文件增加百度舆图的结构:

复制代码
<com.baidu.mapapi.map.MapView 

        android:id="@+id/bmapview" 

        android:layout_width="match_parent" 

        android:layout_height="match_parent" 

        android:clickable="true" /> 
复制代码

 

 

《3》在libs文件夹下增加刚才下载的SDK(干脆复制,粘贴进入就行了)

 

而后在把百度舆图的JAR也增加到路径中去:

右键名目----------->Properties------>Java Build Path---->Libraries

 

增加进入以后,便了。

《4》MainActivity.java编码(头部的包就不写了,必要用到甚么,本人增加):

 

public class MainActivity extends Activity {

 

    //百度舆图控件,特地表现舆图用的控件

 

     private MapView mMapView = null; 

 

        // 百度舆图工具,空洞的舆图工具

 

        private BaiduMap bdMap; 

 

        //定位形式

 

        private LocationMode currentMode;

 

        //定位客户端

 

        private LocationClient locClient;

 

        //定位图标

 

        private Marker marker1;

 

        //经纬度

 

        private double latitude, longitude;

 

     // 纪录是否第一次定位

 

       private boolean isFirstLoc = true;

 

       //舆图上增加的定位图标

 

       BitmapDescriptor bitmap;

 

       //定位监听器

 

       //BDLocationListener locListener;

 

    @Override

 

protected void onCreate(Bundle savedInstanceState) {

 

    //留存之前Activity状况

 

        super.onCreate(savedInstanceState);

 

        // SDK初始化

 

        SDKInitializer.initialize(getApplicationContext()); 

 

//设置android程序没有标题

 

        requestWindowFeature(Window.FEATURE_NO_TITLE);

 

//表现结构界面

 

        setContentView(R.layout.activity_main);

 

//获取表现舆图的控件

 

        mMapView = (MapView) findViewById(R.id.bmapview);

 

         //tv_show=(TextView)findViewById(R.id.tv_show);

 

  //在舆图上表现的那个小图标

 

       bitmap = BitmapDescriptorFactory   

 

              .fromResource(R.drawable.icon_marka);

 

        init();

 

    }

 

private void init() {        

 

    //定义舆图状况

 

    MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);

 

    //获取舆图工具

 

        bdMap = mMapView.getMap();     

 

        //LatLng cenpt=new LatLng(30.963175f,120.400244f);

 

        //BDLocation location;

 

        //latitude = location.getLatitude();

 

       // LatLng cenpt = new LatLng(location.getLatitude(),location.getLongitude());

 

//        OverlayOptions options = new MarkerOptions()   

 

//        .position(cenpt)   

 

//        .icon(bitmap);

 

//        MapStatus mMapStatus=new MapStatus.Builder()

 

//        .target(cenpt)

 

//        .zoom(18)

 

//        .build();

 

        //普通舆图   

 

        bdMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

 

       // MapStatusUpdate msu = MapStatusUpdateFactory.newMapStatus(mMapStatus);

 

       //设置舆图初始状况

 

        bdMap.setMapStatus(msu);

 

        //bdMap.addOverlay(options);

 

//        bdMap = new BaiduMap.Map("container", {mapType:BaiduMap.MAP_TYPE_NORMAL});

 

//        map.setCurrentCity("北京市");

 

//        map.centerAndZoom(new bdMap.Point(116.404, 39.915), 18);

 

       //目前定位形式为:普通

 

        currentMode = LocationMode.NORMAL;

 

        // 开启定位图层

 

        bdMap.setMyLocationEnabled(true);

 

        //定位服无的客户端

 

        locClient = new LocationClient(this);

 

        //注册监听函数

 

        locClient.registerLocationListener(locListener);

 

            //建设LocationClient这个定位客户端的定位参数

 

            LocationClientOption option = new LocationClientOption();

 

            option.setOpenGps(true);// 翻开gps

 

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

 

            option.setAddrType("all");//设置地点类型

 

            option.setScanSpan(1000);//1s后定位

 

            //建设客户端

 

            locClient.setLocOption(option);

 

            //启动定位(这一步很紧张,否则前边注册的那个监听函数就没用了)

 

            locClient.start();

 

     }

 

    //这个是即是定位的监听函数(获取定位坐标,在坐标上表现图标)

 

    BDLocationListener locListener = new BDLocationListener(){

 

     @Override

 

     public void onReceiveLocation(BDLocation location) {

 

      if (location == null ||  mMapView == null)

 

            return ;

 

           // 组织定位数据

 

       MyLocationData locData = new MyLocationData.Builder()

 

              .accuracy(location.getRadius())//

 

              .direction(100)// 方向

 

              .latitude(location.getLatitude())//

 

              .longitude(location.getLongitude())//

 

              .build();

 

           // 获取经纬度

 

           latitude = location.getLatitude();

 

           longitude = location.getLongitude();

 

           //设置定位数据

 

           bdMap.setMyLocationData(locData);

 

           // 第一次定位的时候,那舆图中间店表现为定位到的地位

 

           LatLng cenpt = new LatLng(latitude,longitude);

 

           //定义笼盖物的坐标和运用的图标

 

           OverlayOptions options = new MarkerOptions()   

 

            .position(cenpt)

 

            .icon(bitmap);

 

           //在舆图上增加笼盖物

 

           bdMap.addOverlay(options);

 

           if (isFirstLoc) {

 

              isFirstLoc = false;

 

              LatLng ll = new LatLng(location.getLatitude(),

 

                     location.getLongitude());

 

           // MapStatusUpdate形貌舆图将要发生的变更

 

       MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);

 

           //更新舆图状况

 

              bdMap.animateMapStatus(msu);

 

              // bdMap.setMyLocationEnabled(false);

 

              //reverseGeoCode(cenpt);

 

              //表现地点信息

 

              Toast.makeText(getApplicationContext(), location.getAddrStr(),

 

                     Toast.LENGTH_SHORT).show();

 

                     }

 

                  }  

 

       };    

 

    @Override 

 

    protected void onResume() { 

 

        super.onResume(); 

 

        mMapView.onResume(); 

 

    } 

 

    @Override 

 

    protected void onPause() { 

 

        super.onPause(); 

 

        mMapView.onPause(); 

 

    } 

 

    @Override 

 

    protected void onDestroy() { 

 

        mMapView.onDestroy(); 

 

        mMapView = null; 

 

        super.onDestroy(); 

 

    } 

 

  

 

}

 



上篇:上一篇:android EditText光标地位(定位到末了)
下篇:下一篇:Android Studio中获取sha1证书指纹数据的方法