2016.12 Mac android studio 简单集成百度地图

心情:临近年末还要在这瞎折腾。
系统:macmini 10.11.4
一:首先注册 http://lbsyun.baidu.com/apiconsole/key

2016.12 Mac android studio 简单集成百度地图_第1张图片
8103F12E-CFF2-4795-BFE6-93609BF510C0.png

这个按照对应的填上即可

2016.12 Mac android studio 简单集成百度地图_第2张图片
C35A22C3-3E87-49E2-B87E-E68FB09FC215.png

注意:发布版的SHA1是要你的密钥的SHA1,开发者的SHA1获取方法:在android studio中
Terminal中输入:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 可以看到SHA1.
提交就可以获取到AK(appkey了)。
二:下载sdk
http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
选中自己所需的功能下载。

下载回来中的libs文件夹,把其中的文件拷贝到自己对应的项目文件夹中。jniLibs和libs下.在build.gradle中添加:

sourceSets {   
 main {    
  jniLibs.srcDirs = ['libs']   
 }
}

三:使用
配置权限,AK等。


appkey,服务:


                        

在application中配置:
//百度地图sdk配置SDKInitializer.initialize(getApplicationContext());

定位和地图显示:

package ;
//**************************************************************************************************////////////////////////////////////////定位代理和显示地图//////////////////////////////////////////////**************************************************************************************************
import java.sql.Time;
import java.util.ArrayList;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import java.util.Map;
import java.util.Timer;
import java.util.HashMap;
import java.util.TimerTask;
import android.os.Handler;
import android.widget.Button;
import android.widget.TextView;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
//**************************************************************************************************//////////////////////////////////////////定位返回/////////////////////////////////////////////////////**************************************************************************************************
interface BLocation {   
 public void BLocation(int Info,CPlace Data);
}
//**************************************************************************************************////////////////////////////////////////定位代理和显示地图//////////////////////////////////////////////**************************************************************************************************
class CLocation {
   //定位代理状态    public int LM_NUL=0;//空   
 public int LM_STR=1;//开始  
  public int LM_END=2;//结束 
   public int LM_BRK=3;//失败 
   public int nManaStat=0;    //北京 
   public double nOffLat=39.915352;  
  public double nOffLon=116.397105;  
  //定位代理视图    
public MapView mMapMana=null;  
  //地图显示视图  
  public MapView mMapView=null;  
  public BaiduMap mBaiduMap;
    public BLocation mBLocation=null;   
 public Context mContext=null;    //百度定位   
 private final String TAG = "CMainView";  
  private LocationClient mLocationClient; 
   private BDLocationListener mBDLocationListener; 
   //请求定位信息(闭包)//////////////////////////////////////////////////////////////////////////////   
 public  void fAskPlace(BLocation AskBack){        /*mLocList.add(AskBack);   
     if (mLocList.size()==1){fLocation();}*/    }  
  //复原//////////////////////////////////////////////////////////////////////////////////////////    public void fRemove(){  
      if(mMapMana != null)
{         
   FV.RemoveView(mMapMana,DCR.CLEAR);    
        mMapMana = null;      
  }   
 }  
  /** 获得所在位置经纬度及详细地址 */ 
   public void fGetLocation(BLocation Bk){     
   // 声明LocationClient类   
     // 注册监听     
   mLocationClient = new LocationClient(CApplication.getContext());        mBDLocationListener = new CBDLocationListener();        mLocationClient.registerLocationListener(mBDLocationListener);        mBLocation=Bk;  
      // 声明定位参数     
   LocationClientOption option = new LocationClientOption();        option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);
// 设置定位模式 高精度     
   option.setCoorType("bd09ll");// 设置返回定位结果是百度经纬度 默认gcj02//     
 option.setScanSpan(5000);// 设置发起定位请求的时间间隔 单位ms默认定位一次       
 option.setOpenGps(true);    
    option.setIsNeedAddress(true);// 设置定位结果包含地址信息        mLocationClient.setLocOption(option); // 设置定位参数        mLocationClient.start();// 启动定位  
  }  
  //百度定位监听   
 private class CBDLocationListener implements BDLocationListener {        @Override        
public void onReceiveLocation(BDLocation location) {  
          // 非空判断          
  if (location != null) {         
       // 根据BDLocation 对象获得经纬度以及详细地址信息                double latitude = location.getLatitude();      
          double longitude = location.getLongitude();        
        String address = location.getAddrStr();         
   //address  福建省福州市鼓楼区     
           System.out.println(TAG+ "address:" + address + " latitude:" + latitude                        + " longitude:" + longitude + "---");                if (mLocationClient.isStarted()){       
             // 获得位置之后停止定位            
        mLocationClient.stop();        
        }          
      //获取成功回调     
           if (address!=""){fLocationBack(longitude,latitude,address);}//有的手机权限没打开,GPS没打开等addres会等于空     
           else{//不成功返回北京                    fLocationBack(nOffLon,nOffLat,address);        
        }            }else{         
       //不成功返回北京       
         fLocationBack(nOffLon,nOffLat,"");       
     }      
  }   
 }     //取消定位监听 
   public void fDestroy(){   
     // 取消监听函数     
   if (mLocationClient != null) {            mLocationClient.unRegisterLocationListener(mBDLocationListener);        }  
  }    //显示定位数据////////////////////////////////////////////////////////////////////////////////////    public CLocation(
ViewGroup Vw,int Px,int Py,int Wd,int Hg,BLocation Bk){        mBLocation=Bk;fCreatMap(Vw,Px,Py,Wd,Hg);//    
   fLocation();     
   fGetLocation(Bk);  
  }    //在指定视图上显示地图/////////////////////////////////////////////////////////////////////////////  
  public CLocation(ViewGroup Vw,int Px,int Py,int Wd,int Hg,double Lt,double Ln){        fCreatMap(Vw,Px,Py,Wd,Hg);fShow(Lt,Ln);   
 }    
//在指定视图上显示地图/////////////////////////////////////////////////////////////////////////////  
  public void fCreatMap(ViewGroup View,int PX,int PY,int WD,int HG){        mMapView = new MapView(CMainView.mActivity);        mMapView.setY(PY);mMapView.setX(PX);        mMapView.setLayoutParams(new ViewGroup.LayoutParams(WD,HG));        View.addView(mMapView);     
   mBaiduMap = mMapView.getMap();        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); 
   }    //在指定视图上显示地图/////////////////////////////////////////////////////////////////////////////   
 public void fShow(double Lat,double Lon){     
   //定义Maker坐标点    
    if (Lat==0.0){Lat=nOffLat;Lon=nOffLon;}     
   LatLng point = new LatLng(Lat, Lon);        //构建Marker图标        BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.locaton);     
   //构建MarkerOption,用于在地图上添加Marker    
    OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);        //在地图上添加Marker,并显示  
      mBaiduMap.addOverlay(option);    
    MapStatus.Builder builder = new MapStatus.Builder();        builder.target(point).zoom(12.0f);        mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); 
   }    //取得定位数据////////////////////////////////////////////////////////////////////////////////////    //弃用此原生获取定位信息,因为此方法无法获取地址信息,改用百度地图定位可以获取到未知的详细信息fGetLocation    public void fLocation(){        /*mContext=CApplication.getContext();        nManaStat=LM_STR;        // 注册广播        IntentFilter filter = new IntentFilter();        filter.addAction(CPlace.ACTION);        mContext.registerReceiver(new LocationBroadcastReceiver(), filter);   
     // 启动服务        Intent intent = new Intent();        intent.setClass(mContext,locationsv.class);        mContext.startService(intent);   
     //20秒后检查是否代理成功        new Handler(mContext.getMainLooper()).postDelayed(new Runnable() {            public void run() {                fIsLocation();            }        }, 20000);*/    }    //检查是否代理成功(不成功则用北京)//////////////////////////////////////////////////////////////////   /* public void fIsLocation() {        //System.out.println("检查是否代理成功-------fIsLocation");        if (nManaStat == LM_STR) {            nManaStat = LM_BRK;            //System.out.println("不成功的返回");            fLocationBack(nOffLon, nOffLat);}//北京    }*/    //地图定位代理返回////////////////////////////////////////////////////////////////////////////////   /*
 private class LocationBroadcastReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            String Lon="",Lat="";            //System.out.println("地图定位代理返回-------LocationBroadcastReceiver");            if (intent.getAction().equals(CPlace.ACTION) && nManaStat != LM_BRK) {                Lon = intent.getStringExtra(CPlace.LOCATL);                Lat = intent.getStringExtra(CPlace.LOCATR);                //System.out.println("成功的返回"+Lon+Lat);            }            nManaStat=LM_END;            mContext.unregisterReceiver(this);// 不需要时注销            fLocationBack(EST.ToDouble(Lon),EST.ToDouble(Lat));        }    }*/    //地图定位代理返回设置/////////////////////////////////////////////////////////////////////////////    //增加一个详细地址返回    
public void fLocationBack(double Lon,double Lat,String address){        //System.out.println("地图定位代理返回设置------fLocationBack---------------size="+mLocList.size());    
    if (mMapView != null){         
  fShow(Lat,Lon);//        
    fShow(nOffLat,nOffLon);//模拟数据    
    }   
     if (mBLocation != null) {        
   CPlace Plc = new CPlace();     
       Plc.Lon = Lon;Plc.Lat = Lat;     
       Plc.AskTime = DAT.GetNowTime();        
    Plc.address=address;            //获取的详细地址          mBLocation.BLocation(LM_END,Plc);    
    }    }}//******************************************End*****************************************************

你可能感兴趣的:(2016.12 Mac android studio 简单集成百度地图)