您的位置:首页 > 其它

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

2015-12-28 16:35 344 查看
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();

    }

    }

      }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: