菜鸟学习百度地图总结

一,百度地图:

首先,建立项目,得到自己的密钥。

密钥得到方法:在c盘.android目录下启动命令窗口输入keytool -list -v-keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android)



第一步:在百度api上按要求填入包名和密钥创建应用申请自己需要的功能

导入BaiduLBS_AndroidSDK_Lib\libs下的所有文件,关键两个必须导入:jar和armeabi。按平台把jar文件添加为library。

在suidio下需要在src/main/目录下新建jniLibs目录,拷贝armeabi文件夹,注意jar和armeabi里的so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。

第二步:在AndroidManifest中添加开发密钥、所需权限等信息;

(1)在application中添加开发密钥

<application> 

   <meta-data 

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

       android:value="开发者 key"/> 

</application>

2)添加所需权限

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

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

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

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

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

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

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

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

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

第三步,在布局xml文件中添加地图控件;

<com.baidu.mapapi.map.MapView 

   android:id="@+id/bmapView" 

   android:layout_width="fill_parent" 

   android:layout_height="fill_parent" 

   android:clickable="true" />

第四步,在应用程序创建时初始化 SDK引用的Context 全局变量:

public class MainActivity extends Activity { 

    @Override 

    protected voidonCreate(Bundle savedInstanceState) { 

       super.onCreate(savedInstanceState);  

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

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

       SDKInitializer.initialize(getApplicationContext()); 

       setContentView(R.layout.activity_main); 

    } 

}

注意:在SDK各功能组件使用之前都需要调用

SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中

第五步:在生命周期里设置地图的周期,只有pause,resume,destory三个。

 

简单添加标记:

LatLng cent = new LatLng(00,00);
BitmapDescriptor makrbit = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
OverlayOptions oo = new MarkerOptions().title("Location").position(cent).icon(makrbit);
map.addOverlay(oo);

 

点击获得地图上某点的位置:

1,分为mark 和空白





2,通过Activity触摸事件:

 

点击屏幕显示具体的地理位置并将其标志,和移动到此处。

 



定位并标记位置

第一步:配置权限和设置服务:

<!-- 这个权限用于进行网络定位-->
<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>

 

<service
   
android:name="com.baidu.location.f"
   
android:enabled="true"
   
android:process=":remote"
>
    <intent-filter>
        <action android:name="com.baidu.location.service_v2.2">
        </action>
    </intent-filter>
</service>

接下来实例化有关的类

mLocationClient =new LocationClient(getApplicationContext());    //声明LocationClient
mLocationClient.registerLocationListener(myListener);   //注册监听函数

设置定位选项和监听方法:

LocationClientOptionoption = newLocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span=1000;
option.setScanSpan(2000);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
mLocationClient.setLocOption(option);

 

 

 

监听实现:

public class MyLocationListenerimplements BDLocationListener {
    @Override
   
public void onReceiveLocation(BDLocation location) {
        //Receive Location
       
if(location ==null) {
            return;
        }
        bdLocation = location;
        int errcode = location.getLocType();
          }
}

 

其中errcode返回的数字可判断地位类型和错误情况

 

定位周围相关位置并标记:

MyLocationData mydata = new MyLocationData.Builder()
        .accuracy().direction().latitude().longitude();
map.setMyLocationData(mydata);
BitmapDescriptor marklocat = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
MyLocationConfiguration configuration = new MyLocationConfiguration(MyLocationConfiguration.
        LocationMode.NORMAL,
        true,marklocat);
map.setMyLocationConfigeration(configuration);

其中mydata里写入自己的要地位的位置信息。

常见错误:

1,找不到option资源,报需要读取手机权限

这是因为没有进行正确的定位权限配置

2,连接不上一直baidu be connected…

这个比较坑,试了很多方法,有的说ClientLocation的上下文

必须是Applicationtext,但试了无效,最后发现原来是配置问题,下的locsdk.so版本的问题一直不对,在官网下的也不知道什么原因。最后单独选择定位功能的sdk导入成功实现,后来下载实现全部功能的sdk也可以。

3,没有注册服务此时只能实现一次定位,requestLocation无法回调。需要根据需要进行定位是设置setScanSpan(0)。
 
最后虽然实现了定位,但精度很差,大家是怎么解决的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值