先看看demo效果
使用eclipse开发的开发者,只需要将SO的文件夹放到libs下即可;使用AndroidStutio的开发者除了上述操作,还需要在build.gradle中配置SO的使用,如下所示:
开发者如果开发的是系统应用,则只在工程中配置SO还是不够的,还需要手动把对应架构的SO拷贝到/system/lib下,如果是64位系统的话需要将64位的SO拷贝到/sytem/lib64下。
注意:每次新版本的定位SDK,开发者除了要更新JAR包之外,也要注意一下SO有无更新,如果SO名称不一样了,也要及时替换老的SO版本,不然会导致定位失败!
【重要提醒】
定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。
SDK4.2及之后版本需要在Mainfest.xml设置Accesskey,设置有误会引起定位和地理围栏服务不能正常使用,必须进行Accesskey的正确设置。
设置AccessKey,在application标签中加入
package com.duanlian.baidumapdemo;
import android.app.Application;
import com.baidu.mapapi.SDKInitializer;
/**
* 初始化sdk
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SDKInitializer.initialize(this);
}
}
package com.duanlian.baidumapdemo;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView myAddress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myAddress = (TextView) findViewById(R.id.address);
}
public void location(View view){
//跳转到定位的activity
Intent intent = new Intent(MainActivity.this, MapActivity.class);
startActivityForResult(intent,1);
}
/**
* 回调方法拿到数据
* @param requestCode 请求码
* @param resultCode 结果码
* @param data 数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==1&&resultCode==RESULT_OK) {
myAddress.setText("维度:"+data.getStringExtra("getLatitude")+"\n"+"精度:"+data.getStringExtra("getLongitude")+"\n"+"地址:"+data.getStringExtra("getAddress"));
}
}
}
package com.duanlian.baidumapdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
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 MapActivity extends Activity {
// 定位相关
LocationClient mLocClient;
//定位监听
public MyLocationListenner myListener = new MyLocationListenner();
MapView mMapView = null;
BaiduMap mBaiduMap;
boolean isFirstLoc = true; // 是否首次定位
BDLocation mlocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
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);
option.setAddrType("all");
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;
}
mlocation = location;
MyLocationData locData = new MyLocationData.Builder()
.accuracy(mlocation.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(mlocation.getLatitude())
.longitude(mlocation.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 onPause() {
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
/**
* 发送按钮的点击事件
*/
public void sendMessage(View v) {
if (mlocation == null || mMapView == null) {
Toast.makeText(MapActivity.this, "点击了发送按钮", Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent();
//纬度
intent.putExtra("getLatitude", mlocation.getLatitude()+"");
//经度
intent.putExtra("getLongitude", mlocation.getLongitude()+"");
//地址
intent.putExtra("getAddress", mlocation.getAddrStr());
setResult(RESULT_OK, intent);
finish();
}
}