返回错误码61的解决方案我记不住了,我是看了官方demo改的,不过可以看下面的配置设置,应该可以解决,如果不能解决,可以评论或联系我
百度地图api定位的使用详解
1.获取密钥
官网
2.下载SDK,放置添加SDK(jar + so)
选择基础定位或全量定位官网-下载SDK
下载后解压将“libs”直接复制到项目“app”目录下
再将“BaiduNavi_AndroidSDK”中“jniLibs”复制到项目的“main”目录下
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();
}
}