百度地图 Android SDK是一套基于Android 2.3及以上版本设备的应用程序接口。 您可以使用该套 SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。
5.创建地图Activity,管理地图生命周期
自v4.0起,适配Android Wear,支持Android穿戴设备,新增室内图相关功能。
具体步骤如下:
1.申请密钥
具体使用步骤参考百度地图官网:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key
2.配置环境及发布
将下载的工具包解压,将其中的libs文件夹全部复制到AndroidStudio中的项目中
然后在gradle文件中添加如下代码
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
3.添加权限
<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.ACCESS_NETWORK_STATE"/>
<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"/>
并且在Application中添加开发密钥,
value中的值更改为你申请好的密钥
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
>
<!--百度地图用到的Values值-->
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者密钥" />
</application>
在布局中添加地图控件
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
4.初始化百度地图
新建MyApplication类,继承Application,复写OnCreate,并在清单文件中添加name属性.
import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.widget.Toast;
import com.baidu.mapapi.SDKInitializer;
/**
* Created by hatsune39 on 2017/1/3.
* function:因为在SDK各功能组件使用之前需要调用SDKInitializer.initialize(上下文);
* 我们把该方法放在Application的初始化方法中,新建一个类继承Application并在清单文件中配置name属性,
*/
public class MyApplication extends Application {
//复写onCreate方法
@Override
public void onCreate() {
//注册一个KEY验证是否正确的广播所有者,我们在开发APP时经常有一些验证,比如验证网络等等
//创建一个BroadcastReceiver的内部类
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
//复写必须要有的onReceive,第一个参数上下文,第二个参数传进来的Intent对象
@Override
public void onReceive(Context context, Intent intent) {
//得到系统传过来的string值
String action = intent.getAction();
//创建一个空的字符串
String msg = null;
//进行检查,if判断字符串是否相同,
// 验证KEY成功
if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
msg = "验证KEY成功.";
}
//验证key失败
else if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)){
msg = "验证KEY失败";
}
//进行检查,if判断字符串是否相同,验证网络是否连接
else if (action.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)){
msg = "网络连接失败";
}
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
};
//代码进行广播的注册配置,也可以在清单文件里进行配置
IntentFilter intentFilter = new IntentFilter();
//添加过滤条件
intentFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
intentFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
intentFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
//进行广播的注册
registerReceiver(broadcastReceiver,intentFilter);
//进行百度地图的初始化
SDKInitializer.initialize(this);
super.onCreate();
}
}
5.创建地图Activity,管理地图生命周期
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.baidu.mapapi.map.MapView;
public class MainActivity extends AppCompatActivity{
private MapView bmapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//1.设置不显示比例尺图标 参数false是隐藏
bmapView.showScaleControl(false);
//2.设置不显示缩放按钮, 参数false是隐藏
bmapView.showZoomControls(false);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
bmapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
bmapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
bmapView.onPause();
}
private void initView() {
bmapView = (MapView) findViewById(R.id.bmapView);
}
}
完成后能得到如下效果