百度地图的集成

来源:互联网 发布:zeppelin 修改端口 编辑:程序博客网 时间:2024/05/16 16:01

首先给出SDK的下载地址


下载SDK:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download

然后我们要选择自定义下载 

下载的功能如图,也可以按照自己的需求去下载功能模块

然后我们要创建百度地图应用:



SHA 1值我们可以这样获取

打开studio右侧上角的Gradle点击


鼠标双击,会获得sha1值,


包名的话我们可以在自己的build.gradle下获取。

这样我们的应用就创建好了。


(注意,自SDK升级到3.0后,一个百度地图的key对应一个PAK,不能是一对多或者多对一的)

落后的SDK3.3版本的问题:SDK只能给CPU是arm的手机用,手机CPU时Intel就没法用(联想的一些手机就不能运行我们的程序),现在的版本可以了,底层是C来写

落后的SDK3.7版本的问题:百度地图提供的地图模块里有关放大缩小的Button按钮,在小屏幕手机里,显得格外大,适配没有做好.




我们可以看到他的按钮有一些不美观。


从网上下载好,百度提供的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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//这里我没有调用SDKInitializer.initialize(getApplicationContext());因为在自定义的application的oncreate里已经定义了.setContentView(R.layout.activity_main);//控件初始化initView();//获取对MapVIew的控制类BaiduMapBaiduMap 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); }@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView = null;mMapView.onDestroy(); }@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume(); }@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理mMapView.onPause(); }}

以上会完成了它的一个效果

然后我么会发现它没有缩放的按钮。

如注释,这两行代码就是设置的按钮,我们可以把他()中的值改为true,就可以显示图片了





完成




原创粉丝点击