谷歌 地图 android studio,Android Studio百度地图开发(一)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

本人用Android Studio做百度地图开发,调试了一整天,始终无法通过。然后怀疑代码有问题,就换Eclipse进行代码编写,毕竟网上关于Eclipse的资料多一些,出了问题容易解决,后来按照百度的地图文档写的简单的地图展示程序仍是无法通过,经过两个小时的查资料、调试,已经成功解决,要点也已经在上篇文章中写了出来。今天将Eclipse中的代码手工移植到android studio中,结果仍是无法运行,提示mBMapMan = new BMapManager(getApplication());这一句异常,原因是无法加载baidumapSDk。然后狂查资料,试了很多办法,终于成功解决,下面说明完整的步骤和代码。

一、新建工程

这个就不详细说了,起好名字,一路next即可,需要注意的是,工程名字尽量保持与申请百度key的应用名称相一致。

二、加入地图包

1、在与src同级的libs文件夹下放入jar文件(baidumapapi_v2_3_5.jar和locSDK_3.1.jar,一个用于地图,一个用于定位)。

如下图中的蓝色椭圆区。然后右键libs下的jar文件,选择"Add as library"。

2、在main文件夹下新建jniLibs文件夹,niLibs文件夹下新建armeabi文件夹,然后将libBaiduMapSDK_v2_3_5.so和liblocSDK3.so放入该文件夹下。如下图红色椭圆部分。注意:该处与eclipse有所不同,按照eclipse步骤将armeabi与jar放在同一目录下,无法编译通过。

a1568fc453f9688a6d1871b1e1553e96.png

三、代码编写

1、权限设置等

打开AndroidManiFest.xml,此处若看百度地图文档,不要复制文档代码,复制demo代码。代码如下:

package="com.android.dddd" >

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name="com.android.bjshxian.MainActivity"

//一下两行加入的代码

android:configChanges="orientation|keyboardHidden"

android:screenOrientation="sensor"

//加入的代码结束

android:label="@string/app_name" >

//以下为权限设置

//权限设置结束

//以下为屏幕支持设置

android:anyDensity="true"

android:largeScreens="true"

android:normalScreens="false"

android:resizeable="true"

android:smallScreens="true" />

2、布局文件

在activity_main.xml中加入如下代码,此处注意是com.baidu.mapapi.map.MapView,不是android自带的MapView,也不是com.baidu.mapapi.map.mapview,我曾因为误将MapView写成mapview调试了将近半个小时。

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:clickable="true">

3、MainActivity.java,增加相关引用

//以下为baidu地图类

import com.baidu.mapapi.BMapManager;

import com.baidu.mapapi.MKGeneralListener;

import com.baidu.mapapi.map.MKEvent;

import com.baidu.mapapi.map.MKMapViewListener;

import com.baidu.mapapi.map.MapController;

import com.baidu.mapapi.map.MapView;

import com.baidu.platform.comapi.basestruct.GeoPoint;

//以下为用到的android类

import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.widget.Toast;

//声明变量:

private static final String strKey = "XSKUnDZQHrKDuteH234cR3Zt";//此处是百度key,记得换成自己的key

private Toast mToast;

//百度地图的三个重要元素

private BMapManager mBMapMan = null;

private MapView mMapView = null;

private MapController mMapCon = null;

//MKMapViewListener 用于处理地图事件回调

private MKMapViewListener mMapListener = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//创建MapManager一定要在 setcontentView之前

mBMapMan = new BMapManager(getApplication());

mBMapMan.init(strKey, new MyGeneralListener());

setContentView(R.layout.activity_main);

mMapView = (MapView) findViewById(R.id.bmapView);

initMap();

double cLat = 32.044382;

double cLon = 118.828688;

moveToPoint(cLat, cLon);

}

/**

* 将地图移到指定位置,此函数只是显示的中心位置,并非精确到某个定位点

*/

private void moveToPoint(double cLat ,double cLon){

/**

* 将地图移动至指定点

* 使用百度经纬度坐标,可以通过http://api.map.baidu.com/lbsapi/getpoint/index.html查询地理坐标

* 如果需要在百度地图上显示使用其他坐标系统的位置,请发邮件至mapapi@baidu.com申请坐标转换接口

*/

GeoPoint p = new GeoPoint((int)(cLat * 1E6),(int)(cLon * 1E6));

mMapCon.setCenter(p);

}

/**

* 在布局文件被载入之后,初始化地图

*/

private void initMap(){

//根据mapView获取 mapController,这些都是地图编程必须的

mMapCon = mMapView.getController();

mMapCon.enableClick(true); //设置地图响应点击事件

mMapCon.setZoom(12); //设置地图缩放级别为12

//显示内置的缩放控件

mMapView.setBuiltInZoomControls(true);

}

// 常用事件监听,用来处理通常的网络错误,授权验证错误等

class MyGeneralListener implements MKGeneralListener {

@Override

public void onGetNetworkState(int iError) {

if (iError == MKEvent.ERROR_NETWORK_CONNECT) {

showToast("网络错误");

}

else if (iError == MKEvent.ERROR_NETWORK_DATA) {

showToast("请输入正确的检索条件");

}

// ...

}

@Override

public void onGetPermissionState(int iError) {

//非零值表示key验证未通过

if (iError != 0) {

//授权Key错误:

showToast("授权Key错误");

}

else{

showToast("key认证成功");

}

}

}

//显示toast

public void showToast(String msg) {

if (mToast == null) {

mToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);

} else {

mToast.setText(msg);

mToast.setDuration(Toast.LENGTH_SHORT);

}

mToast.show();

}

大功告成,编译即可。

另外补充一点,申请key时需要用到SHA1,android studio中没找到,我是从Eclipse中找的。若哪位朋友知道as中怎样找,还望告知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值