百度地图的集成

首先给出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;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//这里我没有调用SDKInitializer.initialize(getApplicationContext());因为在自定义的application的oncreate里已经定义了.

setContentView(R.layout.activity_main);

//控件初始化
initView();


//获取对MapVIew的控制类BaiduMap

BaiduMap 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);

 }

@Override
protected void onDestroy() {
super.onDestroy();

//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView = null;

mMapView.onDestroy();

 }


@Override
protected void onResume() {

super.onResume();

//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

mMapView.onResume();

 }

@Override
protected void onPause() {

super.onPause();

//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();

 }

}

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

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

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





完成




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值