安卓实现百度地图调用详细解释

来源:互联网 发布:微信红包软件 编辑:程序博客网 时间:2024/06/10 23:10

1、申请一个百度账号

2、输入http://developer.baidu.com/map/网址进入百度地图api

3、找到android开发,下载所需要的SDK

4、点击“开发”里面android地图SDK,了解详细情况

5、点击“获取密匙”-》创建应用——》输入应用名称,应用类型android SDK,数字签名是eclipse里面window里面Preferences的android里面的Build里面查找SHA1,进行粘贴复制

6、包名完全和自己建的工程的包一样名称,然后点击提交

7、讲下载的SDK导入到自己的文件中

8、根据百度地图提供的开发指南,首先在AndroidManifest中添加开发密钥、所需权限等信息;

(1)在application中添加开发密钥 
在<application>  中粘贴
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
开发者 key改为刚才创建的应用所生成的特有的密匙
2)添加所需权限 
<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.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
在布局xml文件中添加地图控件; 
<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />
在应用程序创建时初始化 SDK引用的Context 全局变量: 
public class MainActivity extends Activity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
    }  
}
注意:在SDK各功能组件使用之前都需要调用 
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
创建地图Activity,管理地图生命周期;
public class MainActivity extends Activity {  
    MapView mMapView = null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);   
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity_main);  
        //获取地图控件引用  
        mMapView = (MapView) findViewById(R.id.bmapView);  
    }  
    @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();  
        }  
    }

然后进行完善实现定位以等其他功能,具体MainActivity中代码如

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.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private MapView mMapView = null;  
private  BaiduMap mbitMap;
private Context context;
//定位相关
private LocationClient mLocationClient;
private MyLocationListener mMyLocationListener;
private boolean isFirstIn = true;
private double mLatitude;
private double mLongtitude;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.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() {
// TODO Auto-generated method stub
mLocationClient = new LocationClient(this);
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);

mLocationClient.setLocOption(option);
}
private void initView() {
// TODO Auto-generated method stub
mMapView = (MapView) findViewById(R.id.mapView);
mbitMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
mbitMap.setMapStatus(msu);
}
  protected void onResume()
  {
 super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
      mMapView.onResume(); 
  }
  protected void onStart()
  {
  super.onStart();
  mbitMap.setMyLocationEnabled(true);
  if(!mLocationClient.isStarted())
  mLocationClient.start();
  }
  protected void onPause()
{
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
        mMapView.onPause();  
}
  protected void onStop()
{
super.onStop();
mbitMap.setMyLocationEnabled(false);
  //if(!mLocationClient.isStarted())
  mLocationClient.start();
}
protected void onDestroy()
{
super.onDestroy();
mMapView.onDestroy(); 
}
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId())
    {
    case R.id.map_common:
    mbitMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
    break;
    case R.id.map_site:
    mbitMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
    break;
    case R.id.map_traffic:
    if(mbitMap.isTrafficEnabled())
    {
    mbitMap.setTrafficEnabled(false);
    item.setTitle("实时交通off");
    }
    else
    {
    mbitMap.setTrafficEnabled(true);
    item.setTitle("实时交通on");
    }
    break;
    case R.id.map_location:
    centerToMyLocation();
    break;
    }
       
        return super.onOptionsItemSelected(item);
    }
      //定位我的位置
    private void centerToMyLocation()
    {
    LatLng latLng = new LatLng(mLatitude,mLongtitude);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
mbitMap.animateMapStatus(msu);
    }
    private class MyLocationListener implements BDLocationListener
    {
    public void onReceiveLocation(BDLocation location) 
    {
    MyLocationData data = new MyLocationData.Builder()//
    .accuracy(location.getRadius())//
    .latitude(location.getLatitude())//  //为了格式好看
    .longitude(location.getLongitude()).build();
    mbitMap.setMyLocationData(data);
    //MyLocationConfiguration config = new MyLocationConfiguration(LocationMode., arg1, arg2)
   
    mLatitude = location.getLatitude();//更新最新的经纬度
    mLongtitude = location.getLongitude();
    if(isFirstIn)
    {
    LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
    MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
    mbitMap.animateMapStatus(msu);
    isFirstIn=false;
   
    Toast.makeText(context, location.getAddrStr(),Toast.LENGTH_SHORT).show();
    }
    }
      }
}

0 0