• 中级实训Android学习记录——Android Studio工程配置并进行地图显示


    学习记录 2020/12/14

    • 之前过程:获取开发密钥(AK)
    1. Android Studio工程配置

      • 教程官方地址:Android Studio配置

      • 创建Android Studio项目

        • 在Android Studio中创建一个Android项目。
      • 在项目中集成BaiduMap SDK

      • 下载开发包

      • 普通的地图服务和包含步骑行导航的地图服务需要下载不同的开发包,点击下载开发包
        1、下载普通开发包
        image-20201214115215264

        2、将开发包拷贝至工程

        image-20201214115628797

        image-20201214115807703

        在app目录下的build.gradle文件中android块中配置sourceSets标签,如果没有使用该标签则新增,详细配置代码如下:

        sourceSets {
          main {
              jniLibs.srcDir 'libs'
          }
        }
        

        image-20201214115919968

        3、 在工程配置中需要将前面添加的jar文件集成到我们的工程中

        • 在libs目录下,选中每一个jar文件(此处只有一个BaiduLbs_Android.jar)右键,选择Add As Library…,如图:

        image-20201214120145267

        • 然后此时会发现在app目录的build.gradle的dependencies块中生成了工程所依赖的jar文件的对应说明,如下所示:

        image-20201214120231517

      • 应用混淆配置

    现在我们的应用中已经集成了百度地图SDK,当我们在打包混淆的时候需要注意于BaiduMap SDK 相关的内容不应该被混淆,所以我们需要配置混淆文件。

    • 打开app目录下的build.gradle文件,在release代码块中添加如下内容(若已经由Android Studio自动生成,则不用手动配置)

      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      

      进入文件后发现Android Studio已自动配置:

      image-20201214120547190

    • 编写混淆文件,打开app目录下的proguard-rules.pro文件,添加如下代码。

    -keep class com.baidu.** {*;}
    -keep class vi.com.** {*;}
    -keep class com.baidu.vi.** {*;}
    -dontwarn com.baidu.**
    

    此时遇到了Unresolved class name 错误,我们把以上代码改成

    -keep class com.baidu.*.* {*;}
    -keep class vi.com.*.* {*;}
    -keep class com.baidu.vi.*.* {*;}
    -dontwarn com.baidu.*.*
    

    错误解决

    • 至此您已完成AndroidStudio开发环境的配置,快去开发您的第一个包含BaiduMapSDK的Android应用吧,
    • 应用百度API

    百度地图SDK为开发者提供了便捷的使用百度地图能力的接口,通过以下几步操作,即可在您的应用中使用百度地图:

    • 官方教程:显示地图

    • 第一步 配置AndroidManifest.xml文件

      • 1.在中加入如下代码配置开发密钥(AK):

        <application>  
            <meta-data  
                android:name="com.baidu.lbsapi.API_KEY"  
                android:value="开发者 key" />  
        </application>
        // 开发者key替换为你为该应用申请的AK
        
      • 2.在外部添加如下权限声明:

        <!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
        <uses-permission android:name="android.permission.INTERNET" />
        <!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        
        <!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
        
    • 第二步 在布局文件中添加地图容器

      • MapView是View的一个子类,用于在Android View中放置地图。MapView的使用方法与Android提供的其他View一样。

        // 我们在layout_main.xml里面直接配置MapView
            <com.baidu.mapapi.map.MapView
                android:id="@+id/bmapView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clickable="true"
                />
        
    • 第三步 地图初始化

      注意:在SDK各功能组件使用之前都需要调用“SDKInitializer.initialize(getApplicationContext())”,因此建议在应用创建时初始化SDK引用的Context为全局变量。

      • 我们直接在MainActivity中使用Map,示例代码如下:

        public class DemoApplication extends Application {
            @Override
            public void onCreate() {
                super.onCreate();
                //在使用SDK各组件之前初始化context信息,传入ApplicationContext
                SDKInitializer.initialize(this);
                //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
                //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
                SDKInitializer.setCoordType(CoordType.BD09LL);
            }
        }
        

        AndroidManifest.xml文件中声明该Application

        image-20201214140237073

    • 第四步,创建地图Activity,管理MapView生命周期

      注意:在项目中使用地图的时候要特别注意合理地管理地图生命周期,这非常重要。

      • 以下示例代码简述对地图生命周期的管理:
      package com.example.randommap;
      
      import androidx.appcompat.app.AppCompatActivity;
      
      import android.os.Bundle;
      
      import com.baidu.mapapi.CoordType;
      import com.baidu.mapapi.SDKInitializer;
      import com.baidu.mapapi.map.MapView;
      
      public class MainActivity extends AppCompatActivity {
          private MapView mapView = null;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              mapView = findViewById(R.id.bmapView);
          }
      
          @Override
          protected void onResume() {
              super.onResume();
              //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
              mapView.onResume();
          }
          @Override
          protected void onPause() {
              super.onPause();
              //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
              mapView.onPause();
          }
          @Override
          protected void onDestroy() {
              super.onDestroy();
              //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
              mapView.onDestroy();
          }
      }
      
    • 运行程序

    image-20201214140333867

  • 相关阅读:
    使用尾递归对斐波那契优化?
    Ajax是什么?包含什么技术?有什么作用?
    Ajax的乱码解决问题?
    Ajax的核心的对象是什么?
    为什么Java中不支持多重继承?
    vue-router的原理,例如hashhistory和History interface?
    JSP是什么?有什么特点?
    forward 和redirect的区别?
    Listener是什么?有什么作用?
    请说一说Servlet的生命周期?
  • 原文地址:https://www.cnblogs.com/lwfing/p/14164084.html
Copyright © 2020-2023  润新知