工程配置方法:详见
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/buildproject
第一步:在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,在src/main/目录下新建jniLibs目录,工程会自动加载src目录下的so动态库,放入libBaiduMapSDK_vX_X_X_X.so如下图所示,注意jar和so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。
重点来了啊*******
可以吧一下红色代码片直接粘上注意位置
android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "ks.bawei.com.sun1121"
minSdkVersion 17
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDir 'libs'
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
so的配置也可以参考demo给出的目录结构,如下图所示,在app工程路径下,新建libs,并在libs目录下放入对应不同CPU架构的so文件。这样工程并不会自动加载libs下的so,需在gradle编译时,通过加入代码: jniLibs.srcDir ‘libs’ 来说明so的路径为该libs路径。
第二步:工程配置还需要把jar包集成到自己的工程中,如图上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明,如图所示:
jar的配置也可参考eclipse方法,进行以下操作:
菜单栏选择 File —>Project Structure。
在弹出的Project Structure 对话框中, 选择module, 然后点击 Dependencies 选项卡.
点击绿色的加号选择File dependency. 然后选择要添加的jar包即可 完成上边的操作后在app目录下的build.gradle文件中,会有引入的类库,如上图所示。
Android studio工程配置详细请参考官方demo。
显示百度地图
(1)在application中添加开发密钥
<application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> </application>
2)添加所需权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android: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 void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); } }
第五步,创建地图Activity,管理地图生命周期;
public class MainActivity extends Activity { MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } }
使用定位
一:
1:配置环境 进入Android定位SDK的开发指南中点击配置环境
使用AndroidStutio的开发者除了上述操作外,还需要在build.gradle中配置SO文件的使用,如下所示:
sourceSets {
main {
jniLibs.srcDirs = [‘libs’]
}
}
2:
设置AndroidManifest.xml
在Application标签中声明SERVICE组件,每个APP拥有自己单独的定位SERVICE
<service android:name=”com.baidu.location.f” android:enabled=”true” android:process=”:remote”>
</service>
3:声明使用权限
<!– 这个权限用于进行网络定位–>
<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>
4:
设置AcessKey
Android定位SDK4.2及之后版本需要在Mainfest.xml正确设置Accesskey(AK),如果设置错误将会导致定位和地理围栏服务无法正常使用。
设置AK,在Application标签中加入
<meta-data
android:name=”com.baidu.lbsapi.API_KEY”
android:value=”AK” /> //key:开发者申请的Key
//——————-Activity2——————-
复制一下代码即可-
————
代码来源下载
的Demo中src下的baidumapsdk下的demo下的map下的LocationDemo————————
package com.example.baidumap.activity;
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;
import com.example.baidumap.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
public class Activity2 extends Activity{
MapView mMapView = null;
// 定位相关
LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
BaiduMap mBaiduMap;
boolean isFirstLoc = true; // 是否首次定位
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
setContentView(R.layout.activity_main);
//获取地图控件引用
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);
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;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.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 onDestroy() {
super.onDestroy();
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
具体代码:
public class MainActivity extends AppCompatActivity {
MapView mMapView = null;
private BaiduMap mBaiduMap;
private String path;
private Button bt;
boolean isFirstLoc = true; // 是否首次定位
// 定位相关
LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
bt=(Button) findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// setResult(12,new Intent(path));
Intent inetne=new Intent(MainActivity.this,RecycleActivity.class);
startActivity(inetne);
finish();
}
});
mBaiduMap = mMapView.getMap();
定义Maker坐标点
// LatLng point = new LatLng(39.963175, 116.400244);
// //构建Marker图标
// BitmapDescriptor bitmap = BitmapDescriptorFactory
// .fromResource(R.drawable.icon_hidden);
// //构建MarkerOption,用于在地图上添加Marker
// OverlayOptions option1 = new MarkerOptions()
// .position(point)
// .icon(bitmap);
// //在地图上添加Marker,并显示
// mBaiduMap.addOverlay(option1);
//定位
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setIsNeedAddress(true);//设置获得地址位置
option.setIsNeedLocationPoiList(true);//设置获得poi
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocClient.setLocOption(option);
mLocClient.start();
}
/**
* 定位SDK监听函数
*/
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
String str = "定位的信息:"+location.getAddress().address+",纬度:"
+location.getLatitude();
Toast.makeText(MainActivity.this,",纬度:"+location.getLatitude()+"经度"+location.getLongitude(),Toast.LENGTH_LONG).show();
bt.setText(location.getAddress().address);
List l = location.getPoiList();
str += ",poi数量:"+l.size()+",第一个:"+((Poi)(l.get(0))).getName();
path=location.getAddress().address;
Log.i("TAG", str);
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(5).latitude(location.getLatitude())
.longitude(location.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 onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}