大家好,今天来为大家分享Android开发学习笔记:第2天——百度地图SDK应用技巧概述的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
获取包名
为了获取开发密钥,我们需要获取当前项目的包名和SHA密钥。 AndroidManifests.xml中已经定义了包名,如下:
获取SHA密钥
我们应该注意SHA版本。这里引用一下官网教程:
调试版本(debug)和发布版本(release)下的SHA1值是不同的。发布apk时,需要根据发布的apk对应的keystore重新配置密钥。 (注:我们这里使用的是debug版本,开发时请使用debug版本)。
进入控制台并输入以下命令:
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore 密钥生成路径生成密钥
在控制台输入以下命令
keytool -list -v -keystore android.keystore -storepass 密钥密码查看刚刚生成的密钥查看密钥
获取AK
在刚才给出的获取AK的连接中,输入包名和SHA密钥即可创建
获取AK
下载并导入jar包
。前往http://lbs.baidu.com/index.php?title=sdk/downloadaction#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar下载jar包,根据需要选择需要的功能。
然后将jar包导入到AS中。
将jar包放入项目目录下的/app/libs目录下。另外,将工程所需的CPU架构文件复制到该目录下。
/应用程序/libs目录
然后在build.gradle中配置sourceSets,并在build.gradle(Module:app)中添加以下代码:
主要的{
jniLibs.srcDir "库"
}
}
在工程中添加jar文件
将左侧窗口中的Android选项卡切换到Project选项卡,可以看到刚刚复制的jar和so文件。
项目结构目录
右键jar包-点击Add As Library,然后选择添加到应用程序中(直接点击ok即可,这里就不截图了)
点击Add As Library
配置混淆文件
因为我们要防止百度地图SDK相关内容被混淆,所以需要配置混淆文件。
打开app目录下的build.gradle(Module:app)文件,在release代码块中添加以下内容(如果已经是Android Studio自动生成的,则无需手动配置)。
构建类型{
发布{
minifyEnabled false
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
}
}编写混淆文件,打开app目录下的proguard-rules.pro文件,添加以下代码。
-保留类com.baidu.** {*;}
-保留类mapsdkvi.com.** {*;}
-dontwarn com.baidu.**
显示地图
初始化地图服务
定义DemoApplication并重写onCreate()方法
公共类DemoApplication 扩展应用程序{
@覆盖
公共无效onCreate() {
super.onCreate();
//在使用各个SDK组件之前初始化上下文信息并传入ApplicationContext
SDKInitializer.initialize(this);
//从4.3.0开始,百度地图SDK所有接口均支持百度坐标和国家测量局坐标。使用此方法设置您使用的坐标类型。
//包括BD09LL和GCJ02坐标,默认为BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
}
}
配置AndroidManifests.xml
在manifest文件中配置应用,配置刚刚获取到的AK值
由于更改SDK需要较多的系统权限,因此在配置manifest时应添加权限声明。
在布局文件中添加地图容器
在manifest文件中声明application和service
应用标签
服务标签
获取定位数据
自定义MyLocationListener。 SDK通过重写BDAbstractLocationListener并重写onReceiveLocation方法实现定位数据的获取,并且可以将定位数据传递给MapView。
公共类MyLocationListener 扩展BDAbstractLocationListener {
@覆盖
公共无效onReceiveLocation(BDLocation位置){
//mapView销毁后,将不再处理新接收到的位置。
if (location==null || mMapView==null){
返回;
}
MyLocationData locData=new MyLocationData.Builder()
.accuracy(location.getRadius())
//这里设置开发者获取到的方向信息,顺时针0-360
.direction(location.getDirection()).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
}
}
自定义Activity
重写Activity中的onCreate()方法,直接启动布局。
公共类MainActivity 扩展AppCompatActivity {
私有最终int SDK_PERMISSION_REQUEST=127;
私有静态字符串permissionInfo=null;
私有静态百度地图mBaiduMap;
私有静态MapView mMapView;
私有静态LocationClient mLocationClient;
公共类MyLocationListener 扩展BDAbstractLocationListener {
@覆盖
公共无效onReceiveLocation(BDLocation位置){
//mapView销毁后,将不再处理新接收到的位置。
if (location==null || mMapView==null){
返回;
}
MyLocationData locData=new MyLocationData.Builder()
.accuracy(location.getRadius())
//这里设置开发者获取到的方向信息,顺时针0-360
.direction(location.getDirection()).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
}
}
protected void onCreate(Bundle savingInstanceState){
getPersimmions();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMapView=(MapView) findViewById(R.id.bmapView);
mBaiduMap=mMapView.getMap();
mBaiduMap.setMyLocationEnabled(true);
//注册LocationListener监听器
MyLocationListener myLocationListener=new MyLocationListener();
mLocationClient.registerLocationListener(myLocationListener);
//定位初始化
mLocationClient=新的LocationClient(this);
//通过LocationClientOption设置LocationClient相关参数
LocationClientOption 选项=new LocationClientOption();
option.setOpenGps(true); //开启GPS
option.setCoorType("bd09ll"); //设置坐标类型
选项.setScanSpan(1000);
//设置位置客户端选项
mLocationClient.setLocOption(选项);
//启用地图定位图层
mLocationClient.start();
}
@覆盖
受保护无效onResume() {
mMapView.onResume();
super.onResume();
}
@覆盖
受保护无效onPause() {
mMapView.onPause();
super.onPause();
}
@覆盖
受保护无效onDestroy() {
mLocationClient.stop();
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView=null;
super.onDestroy();
}Android 6.0之后的版本需要手动获取权限,代码如下:
//获取权限
@TargetApi(23)
私有无效getPersimmions() {
如果(Build.VERSION.SDK_INT=Build.VERSION_CODES.M){
ArrayList 权限=new ArrayList();
/***
* 定位权限为必填权限。如果用户被禁止,则每次进入都会申请。
*/
//定位精确位置
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) !=PackageManager.PERMISSION_GRANTED) {
权限.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) !=PackageManager.PERMISSION_GRANTED) {
权限.add(Manifest.permission.ACCESS_COARSE_LOCATION);
}
/*
* 读写权限、手机状态权限等非必要权限(建议授予)仅申请一次,在用户同意或禁止的情况下才播放一次。
*/
//读写权限
if (addPermission(权限, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
PermissionInfo +="Manifest.permission.WRITE_EXTERNAL_STORAGE 拒绝n";
}
if (permissions.size() 0) {
requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST);
}
}
}
@TargetApi(23)
私人布尔addPermission(ArrayListpermissionsList,字符串权限){
//如果申请没有获得相应权限,则将其添加到列表中,为批量申请做准备
if (checkSelfPermission(权限) !=PackageManager.PERMISSION_GRANTED) {
如果(shouldShowRequestPermissionRationale(权限)){
返回真;
} 别的{
权限列表.add(权限);
返回假;
}
} 别的{
返回真;
}
}
@TargetApi(23)
@覆盖
公共无效onRequestPermissionsResult(int requestCode,String []权限,int [] grantResults){
//TODO 自动生成的方法存根
super.onRequestPermissionsResult(requestCode, 权限, grantResults);
【Android开发学习笔记:第2天——百度地图SDK应用技巧概述】相关文章:
用户评论
终于开始学Android了,Day2就用到百度地图了,太厉害了吧!
有19位网友表示赞同!
想做导航App可以先看看这篇文章,分享经验真好。
有5位网友表示赞同!
看到你已经用到了百度地图SDK,看来Android学得真快啊。
有20位网友表示赞同!
学习笔记这么全面,能写这么详细的总结很棒哦!
有11位网友表示赞同!
我也在学Android,期待以后能像你一样掌握地图API使用~
有9位网友表示赞同!
Day2就用上了SDK,你是学霸级别的!
有5位网友表示赞同!
看这篇文章感觉百度地图还挺好用的,我最近也准备学习一下。
有7位网友表示赞同!
学习笔记分享是这么贴心,希望以后还能看到更多你的干货!
有7位网友表示赞同!
Android地图开发有难度吗?这篇文章能解答我的疑问了。
有16位网友表示赞同!
看了你写的总结,想要找些实践案例看看,这样学的更快吧。
有16位网友表示赞同!
这篇笔记真不错,以后可以直接拿来查阅,省事很多!
有19位网友表示赞同!
你的Android学习之路真是精彩,希望我们都能像你一样进步!
有20位网友表示赞同!
想做地图App可以用这个SDK啊,我记下了,下次可以试试。
有8位网友表示赞同!
总结非常清晰易懂,即使是新手也能看明白。
有19位网友表示赞同!
这篇文章让我对百度地图SDK有了更深的了解,谢谢分享!
有6位网友表示赞同!
学习Android真是太好玩了,还有这么多功能可以探索啊!
有9位网友表示赞同!
Day2就用到SDK了,看来你已经掌握了基础知识,厉害厉害!
有12位网友表示赞同!
希望能看到更多你的Android学习笔记,期待继续关注你的进步。
有16位网友表示赞同!