您的位置:首页 > 其它

15.百度地图

2015-10-27 19:41 148 查看
旧SDK:旧key申请网页:http://developer.baidu.com/map/android-mobile-apply-key.htm添加jar包,可以直接将sample程序中的jar包拷进来用法:
public interface ConstantValue {
String KEY = "1A4A4ABEFBEECD8C17DEE880C4EA69B9607020B5";
}
<com.baidu.mapapi.map.MapView
android:id="@+id/mapview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
public class HelloWorld extends Activity {
private static final String TAG = "HelloWorld";
private BMapManager manager;
private MapView mapView;
private MapController controller;
int latitude = (int) (40.051 * 1E6);// 纬度
int longitude = (int) (116.303 * 1E6);// 经度
GeoPoint hmPos = new GeoPoint(latitude, longitude);// 黑马
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 校验KEY
initManager();
setContentView(R.layout.common);
// 设置地图的缩放级别(V2.X3,19 V1.X 3,18)
// V2.X与V1.X 主要区别
// ①修改了地图文件的格式,优化了地图(110 15)
// ②增加了级别,3D(18,19)
// MapController 管理具体的某一个Mapview:旋转、缩放、移动
mapView = (MapView) findViewById(R.id.mapview);
controller = mapView.getController();
controller.setZoom(12);// 设置地图的缩放级别。 这个值的取值范围是[3,19]
// 在mapview上添加一组缩放按钮
// mapview.add(view)
mapView.setBuiltInZoomControls(true);
controller.setCenter(hmPos);// 坐标 经纬度
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 旋转、缩放、移动
switch (keyCode) {
case KeyEvent.KEYCODE_1:
// 放大
controller.zoomIn();// 一次放大一个级别
break;
case KeyEvent.KEYCODE_2:
// 缩小
controller.zoomOut();
break;
case KeyEvent.KEYCODE_3:
// 以一个点为中心旋转
int rotation = mapView.getMapRotation();// 获取当前的角度
Log.d(TAG, "rotation="+ rotation);// -180~180
controller.setRotation(rotation+30);
break;
case KeyEvent.KEYCODE_4:
// 以一条直线为轴 旋转 俯角(overlooking)
int overlooking = mapView.getMapOverlooking();
Log.d(TAG, "overlooking=" + overlooking);// -45~0
controller.setOverlooking(overlooking-5);
break;
case KeyEvent.KEYCODE_5:
// 移动
controller.animateTo(new GeoPoint(40065796,116349868));
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
private void initManager() {
manager = new BMapManager(getApplicationContext());
/**
* public boolean init(String strKey, MKGeneralListener listener) 参数:
* strKey - 申请的授权验证码(null,"") listener - 注册回调事件 该接口返回网络状态,授权验证结果
*/
manager.init(ConstantValue.KEY, new MKGeneralListener() {
// MKEvent
@Override
public void onGetPermissionState(int iError) {
// 授权验证
if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
Toast.makeText(getApplicationContext(), "验证失败", 0).show();
}
}
@Override
public void onGetNetworkState(int iError) {
// 网络状态
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(getApplicationContext(), "无网络", 0).show();
}
}
});
}
@Override
protected void onResume() {
mapView.onResume();
super.onResume();
}
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onDestroy() {
mapView.destroy();
super.onDestroy();
}
}
  
新SDK:申请新key打开命令行,cd 到 .android目录下输入命令,路径根据自己电脑进行修改,C:\Users\lenovo\.android>"C:\Program Files\Java\jdk1.6.0_45\bin\keytool.exe" -list -v -keystore debug.keystore输入密码:android拷贝SHA1值,如:48:8C:D9:43:56:81:C4:10:10:40:B6:C3:0A:A1:84:A9:65:65:9A:5A安全码就是SHA1值+“;”+packagename(即:数字签名+分号+包名),分号必须是英文的,包名是AndroidManifest.xml里面的package值如:48:8C:D9:43:56:81:C4:10:10:40:B6:C3:0A:A1:84:A9:65:65:9A:5A;cn.itheima.bdmaphm36我的"D:\jdk\bin\keytool.exe" -list -v -keystore debug.keystoreSHA1: 51:18:C7:9F:D3:9D:6E:85:F8:13:55:B2:18:7F:2E:C7:16:63:E7:40用法:在application中添加开发密钥
<application<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="开发者 key" /></application>
添加所需权限
<uses-permission android:name="android.permission.GET_ACCOUNTS" /><uses-permission android:name="android.permission.USE_CREDENTIALS" /><uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /><uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_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.BROADCAST_STICKY" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />
布局文件中添加地图控件
<com.baidu.mapapi.map.MapViewandroid:id="@+id/id_bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" />
在应用程序创建时初始化 SDK引用的Context 全局变量:
@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);// 在使用SDK各组件之前初始化context信息,传入ApplicationContext// 注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);}
不过地图很耗电,所以有必要管理其声明周期
public class MainActivity extends Activity{private MapView mMapView = null;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);// 在使用SDK各组件之前初始化context信息,传入ApplicationContext// 注意该方法要再setContentView方法之前实现SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);// 获取地图控件引用mMapView = (MapView) findViewById(R.id.id_bmapView);}@Overrideprotected void onDestroy(){super.onDestroy();// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();mMapView = null;}@Overrideprotected void onResume(){super.onResume();// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onPause(){super.onPause();// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理mMapView.onPause();}}
  更多介绍:http://blog.csdn.net/lmj623565791/article/details/37730469
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: