百度地图api定位的使用详解和返回错误码61的解决方案

返回错误码61的解决方案我记不住了,我是看了官方demo改的,不过可以看下面的配置设置,应该可以解决,如果不能解决,可以评论或联系我

百度地图api定位的使用详解
1.获取密钥
官网
2.下载SDK,放置添加SDK(jar + so)
选择基础定位或全量定位官网-下载SDK
下载后解压将“libs”直接复制到项目“app”目录下
百度地图api定位的使用详解和返回错误码61的解决方案_第1张图片
百度地图api定位的使用详解和返回错误码61的解决方案_第2张图片
再将“BaiduNavi_AndroidSDK”中“jniLibs”复制到项目的“main”目录下
百度地图api定位的使用详解和返回错误码61的解决方案_第3张图片
百度地图api定位的使用详解和返回错误码61的解决方案_第4张图片
3.配置项目
权限配置就太多了看官网第4、5步配置官网
大家应该注意到我跳过了第三步,第三步的配置我没有用官网的我用的配置是下面的代码,要确保jar文件被项目识别,可以右键jar文件点击add as library即可



 sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
和
implementation files('libs/component_common_sdk_1.2.0.jar')
    implementation 'com.android.support:appcompat-v7:28.0.0'

下面就是代码了,也可以看官网的官网
xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">


    <com.baidu.mapapi.map.MapView
        android:layout_width="match_parent"
        android:layout_height="550dp"
        android:clickable="true"
        android:id="@+id/bmapview">
    </com.baidu.mapapi.map.MapView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <Button
            android:id="@+id/bt"
            android:text="定位"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:onClick="ture"
            android:layout_height="match_parent">
        </Button>
        <Button
            android:id="@+id/bt1"
            android:text="sad"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent">
        </Button>
    </LinearLayout>


</LinearLayout>

activity

package com.example.five;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
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.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;

import java.util.ArrayList;
import java.util.List;

import static android.widget.Toast.LENGTH_SHORT;


public class MapActivity extends Activity{

    private MapView mapView = null;
    private BaiduMap mBaiduMap;
    private Button bt1,bt2,bt;
    public String mlist;







    public LocationClient mLocationClient = null;
    private MyLocationListener myListener = new MyLocationListener();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.map);

        mLocationClient = new LocationClient(getApplicationContext());
        //声明LocationClient类
        mLocationClient.registerLocationListener(myListener);




        init();

        initLocationOption();

        bt = (Button) findViewById(R.id.bt);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MapActivity.this,mlist, Toast.LENGTH_SHORT).show();
            }
        });

    }



    public class MyLocationListener extends BDAbstractLocationListener{
        @Override
        public void onReceiveLocation(BDLocation location){
            //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
            //以下只列举部分获取位置描述信息相关的结果
            //更多结果信息获取说明,请参照类参考中BDLocation类中的说明

            double latitude = location.getLatitude();    //获取纬度信息
            double longitude = location.getLongitude();    //获取经度信息
            float radius = location.getRadius();    //获取定位精度,默认值为0.0f
            String coorType = location.getCoorType();
            //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
            int errorCode = location.getLocType();

            String locationDescribe = location.getLocationDescribe();    //获取位置描述信息
            String addr = location.getAddrStr();    //获取详细地址信息
            String country = location.getCountry();    //获取国家
            String province = location.getProvince();    //获取省份
            String city = location.getCity();    //获取城市
            String district = location.getDistrict();    //获取区县
            String street = location.getStreet();    //获取街道信息
            String adcode = location.getAdCode();    //获取adcode
            String town = location.getTown();    //获取乡镇信息

            mlist = country + '-' + province + '-' + city;
        }
    }

    private void init(){
        mapView = (MapView)findViewById(R.id.bmapview);
        mBaiduMap = mapView.getMap();
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

        LatLng point = new LatLng(30.625172,104.131551);
        BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.dw);
        OverlayOptions options = new MarkerOptions().position(point).icon(bitmap);
        mBaiduMap.addOverlay(options);


//        bt1 = (Button) findViewById(R.id.bt1);
//        bt1.setOnClickListener(this);

    }





    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    protected void onDestroy() {

        mapView.onDestroy();
        mapView  = null;
        super.onDestroy();
    }



    private void initLocationOption() {
        LocationClientOption option = new LocationClientOption();

        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//可选,设置定位模式,默认高精度
//LocationMode.Hight_Accuracy:高精度;
//LocationMode. Battery_Saving:低功耗;
//LocationMode. Device_Sensors:仅使用设备;

        option.setCoorType("bd09ll");
//可选,设置返回经纬度坐标类型,默认GCJ02
//GCJ02:国测局坐标;
//BD09ll:百度经纬度坐标;
//BD09:百度墨卡托坐标;
//海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标

        option.setScanSpan(1000);
//可选,设置发起定位请求的间隔,int类型,单位ms
//如果设置为0,则代表单次定位,即仅定位一次,默认为0
//如果设置非0,需设置1000ms以上才有效

        option.setOpenGps(true);
//可选,设置是否使用gps,默认false
//使用高精度和仅用设备两种定位模式的,参数必须设置为true

        option.setLocationNotify(true);
//可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false

        option.setIgnoreKillProcess(true);
//可选,定位SDK内部是一个service,并放到了独立进程。
//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)

        option.SetIgnoreCacheException(true);
//可选,设置是否收集Crash信息,默认收集,即参数为false

        option.setWifiCacheTimeOut(5*60*1000);
//可选,V7.2版本新增能力
//如果设置了该接口,首次启动定位时,会先判断当前Wi-Fi是否超出有效期,若超出有效期,会先重新扫描Wi-Fi,然后定位

        option.setEnableSimulateGps(true);
//可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false

        option.setIsNeedAddress(true);
//可选,是否需要地址信息,默认为不需要,即参数为false
//如果开发者需要获得当前点的地址信息,此处必须为true

        option.setNeedNewVersionRgc(true);
//可选,设置是否需要最新版本的地址信息。默认需要,即参数为true

        option.setIsNeedLocationDescribe(true);
//可选,是否需要位置描述信息,默认为不需要,即参数为false
//如果开发者需要获得当前点的位置信息,此处必须为true




        mLocationClient.setLocOption(option);
//mLocationClient为第二步初始化过的LocationClient对象
//需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
//更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
        mLocationClient.start();

    }

}

现在就可以获得地址信息了
百度地图api定位的使用详解和返回错误码61的解决方案_第5张图片
有各种信息可以自己设置,一定要在手机上测试,要在设置中将权限给你的应用。

你可能感兴趣的:(android-api)