首先给出SDK的下载地址
下载SDK:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
然后我们要选择自定义下载
下载的功能如图,也可以按照自己的需求去下载功能模块
然后我们要创建百度地图应用:
SHA 1值我们可以这样获取
打开studio右侧上角的Gradle点击
鼠标双击,会获得sha1值,
包名的话我们可以在自己的build.gradle下获取。
这样我们的应用就创建好了。
从网上下载好,百度提供的model后,要正常使用,要到清单配置文件,配置key属性,是从百度控制台获取,发布版签名从定制app上获取.
如图一个AS是studio的 然后一个是eclipse 这里我们选用自己的工具匹配的。(我得是studio)
1.在这里我选用的是百度地图demo里使用的集成方式
将下载好的Demo的libs包的东西导入自己的工程
2.在项目build.gradle文件android{}内,配置下面一段代码,同步一下gradle文件.
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
上述全部做完后,在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" /> 这个key是在百度控制台配置得到的key,具体可以看0.0百度地图密钥申请
</application>
(2)添加所需权限
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
(3)因为在SDK各功能组件使用之前都需要调用SDKInitializer.initialize(getApplicationContext());故我们把该方法放在Application的初始化方法中,新建一个类继承Application,初始化SDKInitializer,进行广播的配置,并在清单配置文件中application配置name属性.属性名就是这个我们新建类名.
public class MyApp extends Application {
@Override
public void onCreate() {
// 注册一个key验证是否正确的广播所者,我们在开发APP时,经常有一些验证,比如网络等,具体流程如下
//创建一个BroadcastReceiver的内部类,
BroadcastReceiver receiver = new BroadcastReceiver() {
//复写其必须有的方法onReceive,第一个参数上下文,第二个参数是传过来的intent.
public void onReceive(Context context, Intent intent) {
//参数intent.getAction得到发送过来的Intent里的action动作
String action = intent.getAction();
//创建一个null的字符串.
String msg = "";
//进行检查,if判断字符串是否相同,action.equals(),直接用SDKInitializer.SDK_BROADTCAST_ACTION_ST...就可以了
if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
msg = "Key验证成功!";
}//判断SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR :验证失败
else if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
msg = "Key验证失败!";
}//判断SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR :网络错误
else if (action.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
msg = "网络错误";
}
//弹吐司,内容就是字符串.
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
};
//代码进行广播的注册配置,也可以在清单配置文件里进行配置
IntentFilter filter = new IntentFilter();
//添加过滤条件,IntentFilter对象.addAction();内容就是SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_....
filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
//进行广播注册,1.要注册广播类对象 2配置文件IntentFilter对象.
registerReceiver(receiver, filter);
// 初始化百度地图SDK
SDKInitializer.initialize(getApplicationContext());
}
}
清单文件的配置(初始化注册)
android:name=".MyApp"
以上就完成了一个百度地图SDK集成到项目中的全部操作.
然后我们要进行布局以及代码的操作。
1.在布局xml文件中添加地图控件
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
2.创建地图Activity,管理地图生命周期
public class MainActivity extends AppCompatActivity {
private MapView mMapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//这里我没有调用SDKInitializer.initialize(getApplicationContext());因为在自定义的application的oncreate里已经定义了.
setContentView(R.layout.activity_main);
//控件初始化
initView();
//获取对MapVIew的控制类BaiduMap
BaiduMap map = mMapView.getMap();
//1.0,使用MapVIew对象,控制是否显示MapVIew上面的按钮
//设置不显示比例尺控件 该方法的参数是boolen,false是不显示缩放控件
mMapView.showScaleControl(false);
//设置不显示缩放控件 该方法的参数是boolen,false是不显示比例尺控件
mMapView.showZoomControls(false);
}
private void initView() {
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView = null;
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();
}
}
以上会完成了它的一个效果
然后我么会发现它没有缩放的按钮。
如注释,这两行代码就是设置的按钮,我们可以把他()中的值改为true,就可以显示图片了
完成