现如今,地图类软件在生活中是不可或缺的,给我们出行带来了极大的便利。那么就让我们来看看怎样实现把百度地图导入到我们的app中吧!
1.申请密钥
http://developer.baidu.com/map/index.php?title=androidsdk
- 进入网页,到达当前位置:Android动图SDK。这一页需要登陆,如果没用账号的话需要注册。
- 找到获取密钥这一栏,点击进入LBS开放平台。点击创建应用按钮,会出现这样一个对话框
应用名称随便填,应用类型选择for mobile。
安全码相当重要,由 数字签名+“;”+包名。
数字签名的获取方法:如果使用eclipse,打开eclipse--->打开Window-->打开preferences-->点击Android--->打开Build
我们所需要的数字签名就是SHA1的数字签名。
然后复制下来按上面的格式填写就ok了,包名当然是你需要导入地图的app的包名。
- 点击确认,可以看见应用创建成功。复制访问应用的ak(API KEY)
- 再次进入百度地图sdk的网站,点击相关下载-->点击全部下载-->选择需要的功能-->下载开发包和示例代码。
- 完成下载后
进入http://developer.baidu.com/map/index.php?title=androidsdk/guide/hellobaidumap
按照该网页提供的步骤进行就OK了!~
显示地图的布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.baidu.mapapi.map.MapView
android:id="@+id/id_bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
</RelativeLayout>
导入地图的参考代码
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toast;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
public class MainActivity extends Activity {
private MapView mMapview;
private BaiduMap mbaidumap;
private Context context;
//定位
private LocationClient mLocationclient;
private MyLocationListener mLocationlistener;
private boolean isFirstIn=true;
private double mLatitude;
private double mLongtitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
this.context=this;
initView();
initLocation();//初始化定位
}
private void initLocation() {
mLocationclient=new LocationClient(this);
mLocationlistener=new MyLocationListener();
mLocationclient.registerLocationListener(mLocationlistener);//注册
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);//返回一下当前位置
option.setOpenGps(true);
option.setScanSpan(1000);//每秒钟请求一次
mLocationclient.setLocOption(option);
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapview.onResume();
}
@Override
protected void onStart() {
super.onStart();
//开启定位
mbaidumap.setMyLocationEnabled(true);
if(!mLocationclient.isStarted())
mLocationclient.start();
}
@Override
protected void onStop() {
super.onStop();
//停止定位
mbaidumap.setMyLocationEnabled(false);
mLocationclient.stop();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapview.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapview.onDestroy();
}
private void initView() {
mMapview=(MapView)findViewById(R.id.id_bmapView);
mbaidumap=mMapview.getMap();
MapStatusUpdate mus=MapStatusUpdateFactory.zoomTo(15.0f);
mbaidumap.setMapStatus(mus);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.id_map_common:
mbaidumap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case R.id.id_map_site:
mbaidumap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case R.id.id_map_traffic:
if(mbaidumap.isTrafficEnabled())
{
mbaidumap.setTrafficEnabled(false);
item.setTitle("实时交通(off)");
}
else
{
mbaidumap.setTrafficEnabled(true);
item.setTitle("实时交通on");
}
break;
case R.id.id_map_location:
LatLng latlng =new LatLng(mLatitude,mLongtitude);
MapStatusUpdate msu=MapStatusUpdateFactory.newLatLng(latlng);
mbaidumap.animateMapStatus(msu);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
private class MyLocationListener implements BDLocationListener
{
@Override
public void onReceiveLocation(BDLocation location) {
MyLocationData date =new MyLocationData.Builder()//
.accuracy(location.getRadius())//
.latitude(location.getLatitude())//
.longitude(location.getLongitude()).build();
mbaidumap.setMyLocationData(date);
//MyLocationConfiguration config=new MyL
//ocationConfiguration(LocationMode., arg1, arg2)
mLatitude=location.getLatitude();
mLongtitude=location.getLongitude();
if(isFirstIn)
{
LatLng latlng =new LatLng(location.getLatitude(),location.getLongitude() );
MapStatusUpdate msu=MapStatusUpdateFactory.newLatLng(latlng);
mbaidumap.animateMapStatus(msu);
isFirstIn=false;
Toast.makeText(context, location.getAddrStr(), Toast.LENGTH_LONG).show();
}
}
}
}