写这篇博格的原因是刚好有需求,然后四处找资料发现百度地图更新太快,网上的博客demo都过时了。对于初学者来说,跟着博客学比较方便快捷,但当有一定程度虚席以后建议跟着官方提供的sample及api学习。
先看一下效果图吧
首先开发环境,本人用的android studio,跟着潮流走嘛!所以我们就从导入百度地图所需的jar和so文件开始,jar的导入就不讲了,你都懂得,嘿嘿!
一.Android studio中默认使用的是gradle编译方式,与ADT编辑方式不一样,那么so文件应当如何引入呢?
其实很简单。看一下so文件如何引入到编译环境,最终到JNI直接可以调用该so文件。
首先,在我们的Module的根目录中建立libs目录,将j百度地图集所需的so文件分别拷入,截图如下:
然后就是编写我们的build.gradle文件。
关于so文件引入的配置很简单,代码配置如下:
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") { destinationDir file("$projectDir/libs") baseName "Native_Libs2" extension "jar" from fileTree(dir: "libs", include: "**/*.so") into "lib" }
自定义一个任务,在其中指定项目所依赖的so文件的目录,这里用了**/*.so来写,为了省事,指定需要拷入的目录 into "lib",那么动态运行库就被拷入到lib目录中。
完整的build.gradle文件如下:
完整的build.gradle文件如下:
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" packagingOptions{ exclude'META-INF/LICENSE.txt' exclude'META-INF/NOTICE.txt' } defaultConfig { applicationId "com.zyx" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") { destinationDir file("$projectDir/libs") baseName "Native_Libs2" extension "jar" from fileTree(dir: "libs", include: "**/*.so") into "lib" } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) } } repositories{ flatDir{ dirs 'libs' //就是你放aar的目录地址 maven { url "https://jitpack.io" } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.0' compile files('libs/commons-codec-1.6.jar') compile files('libs/commons-logging-1.1.1.jar') compile files('libs/fluent-hc-4.2.5.jar') compile files('libs/httpclient-4.2.5.jar') compile files('libs/httpclient-cache-4.2.5.jar') compile files('libs/httpcore-4.2.4.jar') compile files('libs/httpmime-4.2.5.jar') compile files('libs/libammsdk.jar') compile files('libs/universal-image-loader-1.9.3-SNAPSHOT.jar') compile files('libs/xUtils-2.6.14.jar') compile project(':sideingmenu') compile files('libs/MobCommons-2016.0303.1229.jar') compile files('libs/MobTools-2016.0303.1229.jar') compile name: 'SMSSDK-2.0.2', ext: 'aar' compile name: 'SMSSDKGUI-2.0.2', ext: 'aar' compile 'in.srain.cube:ultra-ptr:1.0.7@aar' compile project(':pull') compile 'com.github.PhilJay:MPAndroidChart:v2.2.4' compile files('libs/ipaynow_alipay_v1.0.1.jar') compile files('libs/ipaynow_base_v1.3.5.jar') compile files('libs/ipaynow_qq_v1.0.0.jar') compile files('libs/ipaynow_upmp_v1.0.2.jar') compile files('libs/ipaynow_wechatwp_v1.0.1.jar') compile files('libs/Sunflower.jar') compile files('libs/zxing.jar') }
二,就正式进入开发
1.设置全局的application,如此就不用再每个活动中初始百度sdk了
package com.zyx.map; import android.app.Application; import com.baidu.mapapi.SDKInitializer; /** * Created by zyx on 2016/5/23. */ public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext SDKInitializer.initialize(this); } }
2.MainActivity,源码
package com.zyx.map; import android.app.Activity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.MapView; public class MainActivity extends Activity implements OnClickListener{ private Button bt_local; private Button bt_guide; private Button bt_city; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt_local = (Button) findViewById(R.id.bt_local); bt_guide = (Button) findViewById(R.id.bt_guide); bt_city = (Button) findViewById(R.id.bt_city); bt_local.setOnClickListener(this); bt_guide.setOnClickListener(this); bt_city.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.bt_local: Intent i = new Intent(MainActivity.this,LocationDemo.class); startActivity(i); break; case R.id.bt_guide: i = new Intent(MainActivity.this,RoutePlanDemo.class); startActivity(i); break; case R.id.bt_city: i = new Intent(MainActivity.this,DistrictSearchDemo.class); startActivity(i); break; } } }
3.定位 源码
package com.zyx.map; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption