Android高德地圖(一)[地圖、定位篇]

我們在項目中經(jīng)常會用到地圖定位功能蚀浆,位置搜索和打點功能缀程。
這里會用兩篇文章來跟大家介紹如何從在項目中使用高德地圖。


第一步:獲取鑰匙key

http://lbs.amap.com/api/android-sdk/guide/create-project/get-key 高德API官網(wǎng)中獲取一個key
具體操作請在官網(wǎng)中查看詳情市俊,有什么問題可以在評論或者聯(lián)系QQ杨凑。

第二步:導(dǎo)入jar包、so文件

這里寫圖片描述

直接把下載的整個包拷進libs文件夾里摆昧。
附上下載地址 http://lbs.amap.com/api/android-sdk/download

第三步:配置gradle

1.在Project的gradle中添加
allprojects { repositories { jcenter() // 或者 mavenCentral() } }
如果已存在則不做處理撩满。

2.在module的gradle中添加
sourceSets { main { jniLibs.srcDirs = ['libs'] } }

  compile files('libs/AMap3DMap_4.1.3_AMapLocation_3.3.0_20170118.jar')
  compile files('libs/AMap_Search_V4.0.0_20170111.jar')  //這里是剛才libs文件中的兩個jar包

3.在AndroidManifest.xml中配置權(quán)限:

//地圖包、搜索包需要的基礎(chǔ)權(quán)限
<!--允許程序打開網(wǎng)絡(luò)套接字-->
<uses-permission android:name="android.permission.INTERNET" />  
<!--允許程序設(shè)置內(nèi)置sd卡的寫權(quán)限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
<!--允許程序獲取網(wǎng)絡(luò)狀態(tài)-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!--允許程序訪問WiFi網(wǎng)絡(luò)信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<!--允許程序讀寫手機狀態(tài)和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />     
<!--允許程序訪問CellID或WiFi熱點來獲取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<application
         android:icon="@drawable/icon"
         android:label="@string/app_name" >
         <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="請輸入您的用戶Key"/>
            ……
</application>

最后一步也就是用到我們最開始申請的Key的時候了.
到這里就完成了所有配置绅你,我們可以開始代碼了伺帘。

代碼塊

Xml布局中:

<com.amap.api.maps.MapView
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

Activity中:

public class AddressMapActivity extends FragmentActivity implements LocationSource,
        AMapLocationListener{
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);// 此方法必須重寫
/**
     * 初始化AMap對象
     */
    private void init() {

        if (aMap == null) {
            aMap = mapView.getMap();
            setUpMap();
            //aMap.setOnMapClickListener(this); //不讓點擊
            aMap.setOnCameraChangeListener(this);
        }
    }
    /**
     * 設(shè)置一些amap的屬性
     */
    private void setUpMap() {

        // 自定義系統(tǒng)定位小藍點
        MyLocationStyle myLocationStyle = new MyLocationStyle();
       /* myLocationStyle.myLocationIcon(BitmapDescriptorFactory
                .fromResource(R.mipmap.icon_gcoding));// 設(shè)置小藍點的圖標(biāo)*/
        myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0));// 設(shè)置圓形的邊框顏色
        myLocationStyle.radiusFillColor(Color.argb(57, 17, 0, 5));// 設(shè)置圓形的填充顏色
        myLocationStyle.strokeWidth(0f);// 設(shè)置圓形的邊框粗細(xì)
        // myLocationStyle.anchor(int,int)//設(shè)置小藍點的錨點
//        getMap().setLatLonQuanVisible(false);
        aMap.getUiSettings().setCompassEnabled(false);

        aMap.setMyLocationStyle(myLocationStyle);
        aMap.setLocationSource(this);// 設(shè)置定位監(jiān)聽
        aMap.getUiSettings().setMyLocationButtonEnabled(true);// 設(shè)置默認(rèn)定位按鈕是否顯示
        aMap.setMyLocationEnabled(true);// 設(shè)置為true表示顯示定位層并可觸發(fā)定位,false表示隱藏定位層并不可觸發(fā)定位忌锯,默認(rèn)是false
        //aMap.setMyLocationType();

    }
    /**
     * 定位成功后回調(diào)函數(shù)
     */
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
        if (mListener != null && amapLocation != null) {
            if (amapLocation != null
                    /*開啟定位時*/
                    && amapLocation.getErrorCode() == 0) {
                isHandDrag = false;
                mListener.onLocationChanged(amapLocation);// 顯示系統(tǒng)小藍點
                latitude = amapLocation.getLatitude();
                longitude = amapLocation.getLongitude();
                //city = amapLocation.getCity();
                mlocationClient.stopLocation();
                lat = new LatLonPoint(latitude, longitude);
                mUpdata = CameraUpdateFactory.newCameraPosition(
                        //15是縮放比例伪嫁,0是傾斜度,30顯示比例
                        new CameraPosition(new LatLng(lat.getLatitude(), lat.getLongitude()), 17, 0, 30));
                aMap.moveCamera(mUpdata);
              
            }
          }
          /**
     * 激活定位
     */
    @Override
    public void activate(OnLocationChangedListener listener) {
        mListener = listener;
        if (mlocationClient == null) {
            mlocationClient = new AMapLocationClient(this);
            mLocationOption = new AMapLocationClientOption();
            //設(shè)置定位監(jiān)聽
            mlocationClient.setLocationListener(this);
            //設(shè)置為高精度定位模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //設(shè)置定位參數(shù)
            mlocationClient.setLocationOption(mLocationOption);
            // 此方法為每隔固定時間會發(fā)起一次定位請求偶垮,為了減少電量消耗或網(wǎng)絡(luò)流量消耗张咳,
            // 注意設(shè)置合適的定位時間的間隔(最小間隔支持為2000ms),并且在合適時間調(diào)用stopLocation()方法來取消定位請求
            // 在定位結(jié)束后似舵,在合適的生命周期調(diào)用onDestroy()方法
            // 在單次定位情況下脚猾,定位無論成功與否,都無需調(diào)用stopLocation()方法移除請求砚哗,定位sdk內(nèi)部會移除
            mlocationClient.startLocation();
        }

    }

    /**
     * 停止定位
     */
    @Override
    public void deactivate() {
        mListener = null;
        if (mlocationClient != null) {
            mlocationClient.stopLocation();
            mlocationClient.onDestroy();
        }
        mlocationClient = null;
    }
    /**
     * 方法必須重寫
     */
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    /**
     * 方法必須重寫
     */
    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    /**
     * 方法必須重寫
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

    /**
     * 方法必須重寫
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
        if (null != mlocationClient) {
            mlocationClient.onDestroy();
        }
    }
  }

以上就是一些定位的核心代碼龙助。基本都貼出來了蛛芥,等下一篇寫完后會有完整的demo貼上來的泌参。趕緊試試定位吧。本次功能效果圖

下篇文章會講到poi搜索(附近的位置搜索)常空,逆地理編碼(經(jīng)緯度轉(zhuǎn)具體地址)沽一,大家稍等,先貼出效果圖!

多謝耐心看完漓糙,大家相互學(xué)習(xí)铣缠,有什么問題及時溝通。

以上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝗蛙,一起剝皮案震驚了整個濱河市蝇庭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捡硅,老刑警劉巖哮内,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異壮韭,居然都是意外死亡北发,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門喷屋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琳拨,“玉大人,你說我怎么就攤上這事屯曹∮樱” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵恶耽,是天一觀的道長密任。 經(jīng)常有香客問我,道長偷俭,這世上最難降的妖魔是什么批什? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮社搅,結(jié)果婚禮上驻债,老公的妹妹穿的比我還像新娘。我一直安慰自己形葬,他們只是感情好合呐,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笙以,像睡著了一般淌实。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猖腕,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天拆祈,我揣著相機與錄音,去河邊找鬼倘感。 笑死放坏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的老玛。 我是一名探鬼主播淤年,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钧敞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了麸粮?” 一聲冷哼從身側(cè)響起溉苛,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弄诲,沒想到半個月后愚战,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡齐遵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年寂玲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洛搀。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡敢茁,死狀恐怖佑淀,靈堂內(nèi)的尸體忽然破棺而出留美,到底是詐尸還是另有隱情,我是刑警寧澤伸刃,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布谎砾,位于F島的核電站,受9級特大地震影響捧颅,放射性物質(zhì)發(fā)生泄漏景图。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一碉哑、第九天 我趴在偏房一處隱蔽的房頂上張望挚币。 院中可真熱鬧,春花似錦扣典、人聲如沸妆毕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笛粘。三九已至,卻和暖如春湿硝,著一層夾襖步出監(jiān)牢的瞬間薪前,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工关斜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留示括,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓痢畜,卻偏偏與公主長得像例诀,于是被迫代替她去往敵國和親随抠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容