百度地图API最简单调用
1. user permission
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<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" />
2. application meta-data(安全码及密钥)
安全码的SHA1值实际上是和keystore文件有关的。
默认的debug.keystore在preference-android-build里可以看到,而如果程序生成apk用自己签名的keystore则需要重新配置。
在xml配置文件中,生成一个meta-data,
Name:com.baidu.lbsapi.API_KEY
Value:百度应用开发平台里生成值。
配置方法:在生成apk的最后一步,会显示当前所用keystore的SHA1值,利用这个SHA1值和项目的包名(比如本项目是com.my.study),在百度应用开发平台里获取密钥。
3.布局文件baidu_map.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
<Button
android:id="@+id/back"
android:layout_width="400dp"
android:layout_height="45dp"
android:layout_alignParentBottom="true"
android:background="@drawable/green"
android:text="返回"/>
</RelativeLayout>
4.主程序BaiduMapActivity.java
package com.my.study;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
import android.app.Activity;
import android.content.Intent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
public class BaiduMapActivity extends Activity {
private static MapView mMapView;
private static Button backButton;
protected void onStart(){
//在SDK各功能组件使用之前都需要调用
//SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
super.onStart();
init();
setContentView(R.layout.baidu_map);
mMapView = (MapView) findViewById(R.id.bmapView);
backButton=(Button)findViewById(R.id.back);
//获取地图控件引用
backButton.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//按钮按下时更改视图
if(event.getAction() == MotionEvent.ACTION_DOWN){
backButton.setBackgroundResource(R.drawable.green_click);
}//按钮松开时恢复默认视图
else if(event.getAction()==MotionEvent.ACTION_UP){
backButton.setBackgroundResource(R.drawable.green);
}
return false;
}
});
backButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.setClass(BaiduMapActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
private void init() {
// TODO Auto-generated method stub
SDKInitializer.initialize(getApplicationContext());
}
/**
* 实现对地图生命周期的管理
*/
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
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();
}
}
真机百度地图不显示问题
上面已经提到产生原因,debug.keystore可以支持虚拟机的预览地图,而apk的生成keystore则为项目的自己签名。