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

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

8103F12E-CFF2-4795-BFE6-93609BF510C0.png

这个按照对应的填上即可

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等。

<!--百度地图所需权限--><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><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" />

appkey,服务:


<!--百度定位服务--><service    android:name="com.baidu.location.f"    android:enabled="true"    android:process=":remote" >    <intent-filter>        <action android:name="com.baidu.location.service_v2.2" >        </action>    </intent-filter></service><meta-data    android:name="com.baidu.lbsapi.API_KEY"    android:value="你申请到的AK"/>

在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*****************************************************

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容