1. 程式人生 > >Android類似微信詳細地址選擇(高德地圖)

Android類似微信詳細地址選擇(高德地圖)

利用高德地圖的API做了一個類似微信傳送位置介面地址選擇,介面就3個,一個選擇地址(周邊搜尋),一個搜尋介面(關鍵字搜尋),最後將選擇的地址資訊返回主介面,效果圖如下:

   

對於詳細地址選擇,在專案中難免會遇到,比如電商app,旅遊app等等,下面簡單講解如何實現:

註冊高德開發者賬號,建立應用,獲取AppId

1.建立應用過


確認隨後得到appid

2.下載高德SDK:

高德SDK


二、地址位置選擇

1.地址選擇介面首先需要定位

private void InitLocation() {
    //初始化client
    locationClient = new AMapLocationClient(this.getApplicationContext());
    //設定定位引數
    locationClient.setLocationOption(getDefaultOption());
    // 設定定位監聽
    locationClient.setLocationListener(locationListener);
    locationClient.startLocation();
}


2.定位結果回撥

/**
 * 定位監聽
 */
AMapLocationListener locationListener = new AMapLocationListener() {
    @Override
    public void onLocationChanged(AMapLocation loc) {
        if (null != loc) {
            //解析定位結果
            String city = loc.getCity();
            Log.e("yufs","當前經度"+loc.getLongitude()+"當前維度:"+loc.getLatitude());
            mLoc=loc;
            lp.setLongitude(loc.getLongitude());
            lp.setLatitude(loc.getLatitude());
            //得到定位資訊
            Log.e("yufs","定位詳細資訊:"+loc.toString());
            mLatitude=loc.getLatitude();
            mLongitude=loc.getLongitude();
            //初始化地圖物件
            initMap(loc);
            //查詢周邊
            doSearchQuery(loc.getCity(),loc.getLatitude(),loc.getLongitude());
        } else {
            Toast.makeText(LocationSelectActivity.this, "定位失敗,請開啟位置許可權", Toast.LENGTH_SHORT).show();
        }
    }
};



3.定位成功回撥中進行周邊搜尋

/**
 * 開始進行poi搜尋
 */
protected void doSearchQuery(String city,double latitude,double longitude) {
    String mType="汽車服務|汽車銷售|汽車維修|摩托車服務|餐飲服務|購物服務|生活服務|體育休閒服務|醫療保健服務|住宿服務|風景名勝|商務住宅|政府機構及社會團體|科教文化服務|交通設施服務|金融保險服務|公司企業|道路附屬設施|地名地址資訊|公共設施";
    query = new PoiSearch.Query("", mType, city);// 第一個引數表示搜尋字串,第二個引數表示poi搜尋型別,第三個引數表示poi搜尋區域(空字串代表全國)
    query.setPageSize(20);// 設定每頁最多返回多少條poiitem
    query.setPageNum(currentPage);// 設定查第一頁
    if (lp != null) {
        poiSearch = new PoiSearch(this, query);
        poiSearch.setOnPoiSearchListener(this);
        //以當前定位的經緯度為準搜尋周圍5000米範圍
        // 設定搜尋區域為以lp點為圓心,其周圍5000米範圍
        poiSearch.setBound(new PoiSearch.SearchBound(new LatLonPoint(latitude,longitude), 1000, true));//
        poiSearch.searchPOIAsyn();// 非同步搜尋
    }
}


PoiSearch.SearchBound物件以某一中心點半徑5000米的圓搜尋結果,PoiSearch.Query()的如果第二個引數未填寫會預設返回“餐飲服務”、“商務住宅”、“生活服務”這三種類別的POI,程式碼中基本上把高德所有的搜尋型別都返回了,你可以根據自己情況而定填寫搜尋型別

4.poi搜尋結果回撥監聽,獲取資料顯示

PoiSearch.OnPoiSearchListener onPoiSearchListener = new PoiSearch.OnPoiSearchListener() {
    @Override
    public void onPoiSearched(PoiResult result, int rCode) {
        if (rCode == 1000) {
            if (result != null && result.getQuery() != null) {// 搜尋poi的結果
                if (result.getQuery().equals(poiQuery)) {// 是否是同一條
                    lv_list.onLoadComplete();
                    List<PoiItem> poiItems = result.getPois();// 取得第一頁的poiitem資料,頁數從數字0開始
                    List<PoiBean> tem=new ArrayList<>();
                    if (poiItems != null && poiItems.size() > 0) {
                        for (int i = 0; i < poiItems.size(); i++) {
                            PoiItem poiItem = poiItems.get(i);
                            PoiBean bean=new PoiBean();
                            bean.setTitleName(poiItem.getTitle());
                            bean.setCityName(poiItem.getCityName());
                            bean.setAd(poiItem.getAdName());
                            bean.setSnippet(poiItem.getSnippet());
                            bean.setPoint(poiItem.getLatLonPoint());
                            Log.e("yufs",""+poiItem.getTitle()+","+poiItem.getProvinceName()+","
                                    +poiItem.getCityName()+","
                                    +poiItem.getAdName()+","//區
                                    +poiItem.getSnippet()+","
                                    +poiItem.getLatLonPoint()+"\n");
                            tem.add(bean);
                        }
                        poiData.addAll(tem);
                        mAdapter.notifyDataSetChanged();
                    /* if (isSearch){
                            moveMapCamera(poiItems.get(0).getLatLonPoint().getLatitude(),poiItems.get(0).getLatLonPoint().getLongitude());
                    }*/
                    }
                }
            }
        }
    }



    @Override
    public void onPoiItemSearched(PoiItem poiItem, int i) {

    }
};



其中PoiItem物件為高德提供的一個poi實體類,可以檢視返回的資料結構如下:


然後你也可以選擇其中有用的資訊封裝自己的bean,比如我的PoiBean,獲取有用的資料之後顯示在列表上,到此第一頁搞定

三、關鍵字搜尋

protected void doSearchQuery(String keyWord) {
    if(currentPage==0) {
        savePoiItem.clear();
        ll_loading.setVisibility(View.VISIBLE);// 顯示進度框
        lv_list.setVisibility(View.GONE);
    }
    query = new PoiSearch.Query(keyWord, "", "");// 第一個引數表示搜尋字串,第二個引數表示poi搜尋型別,第三個引數表示poi搜尋區域(空字串代表全國)
    query.setPageSize(10);// 設定每頁最多返回多少條poiitem
    query.setPageNum(currentPage);// 設定查第一頁
    query.setCityLimit(true);
    poiSearch = new PoiSearch(this, query);
    poiSearch.setOnPoiSearchListener(this);
    poiSearch.searchPOIAsyn();
}


同樣呼叫剛才的搜尋介面,只不過加上了關鍵字,去掉了搜尋範圍的限制,搜尋回撥介面同上,將搜尋結果顯示出來,然後搜尋頁面搞定(提醒:demo中使用自己在高德申請的Appkey,然後就可檢視效果了)

最後附上原始碼地址:

下載地址

相關推薦

Android類似詳細地址選擇地圖

利用高德地圖的API做了一個類似微信傳送位置介面地址選擇,介面就3個,一個選擇地址(周邊搜尋),一個搜尋介面(關鍵字搜尋),最後將選擇的地址資訊返回主介面,效果圖如下:   對於詳細地址選擇,在專案中難免會遇到,比如電商app,旅遊app等等,下面簡單講解如何實現:一、註冊高

Android 仿錄製短視訊不使用 FFmpeg

轉載請標明出處與作者:https://www.jianshu.com/p/2cb7b0110fde 專案中原本就有錄製短視訊的功能,使用的是 # qdrzwd/VideoRecorder 這個專案,但是該專案不支援 targetSdkVersion 22以上的版本,而現在各大

Android仿開啟紅包動畫逐幀動畫

Frame Animation(逐幀動畫):        逐幀動畫(Frame-by-frame Animations)從字面上理解就是一幀挨著一幀的播放圖片,就像放電影一樣。和補間動畫一樣可以通過xml實現也可以通過java程式碼實現。接下來藉助目前專案中的一個開

React Native填坑之旅 -- 使用iOS原生檢視地圖

在開發React Native的App的時候,你會遇到很多情況是原生的檢視元件已經開發好了的。有的是系統的SDK提供的,有的是第三方試圖元件,總之你的APP可以直接使用的原生檢視是很多的。React Native提供了一套完善的機制,你可以非常簡單的用來包裝已有

android 仿多圖選擇器(帶預覽、照相功能)

實現了單選、多選 、拍照 、預覽 等功能;先上圖:      程式碼結構  下面不如正題: 一、新增依賴、許可權 1)新增以下依賴 dependencies { compile fileTree(dir: 'libs', include: ['*.jar'])

Android 仿的圖片選擇器ImageSelector的使用

今天給大家介紹一個仿微信的圖片選擇器:ImageSelector。ImageSelector支援圖片的單選、限數量的多選和不限數量的多選。支援圖片預覽和圖片資料夾的切換。在上一篇文章 《Android 實現一個仿微信的圖片選擇器》 中我介紹了ImageSelec

支付:手機系統自帶的瀏覽器,調用支付如何實現非掃碼

所有 價格 驗證 返回 調用 -i 是否為空 支付申請 data- Q:翻看了微信支付的api沒發現支持h5調支付接口的情況(微信js除外),然後卻發現美團的支付成功調用了,這是怎麽實現的? A: 使用微信H5支付即可。H5支付通過URL調起微信APP,

用python進行公眾號開發僅測試學習

python 微信公眾號 api開發今天看到篇教程,是用python開發微信公眾號的,覺得有意思,就敲代碼實現了一下,成功後更覺得好玩,故記錄,方便開發深入時使用。 基礎背景介紹: 首先得有個人微信號(沒有自行註冊),為方便測試學習; 其次,還要註冊微信公眾號,微信公眾號不止一種,是分多種的,具體詳情見官方

中控方法getAccessToken、getJsapiTicket。可繼續優化,redis作為中間層,入庫同時加入redis,要使用時先查詢redis。

IE 數據 names str namespace extend family ext nts <?php /** * 微信父類控制器 * @author Songle * */ namespace Home\Controller; use Think\C

python實現付款碼支付刷卡支付純python

參考連結https://github.com/Jolly23/wx_pay_python https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1 use.py from wx_pay impo

自定義小程式導航相容各種手機

詳細程式碼請見github,請點選地址,其中有原生小程式的實現,也有wepy版本的實現 瞭解小程式預設導航 如上圖所示,微信導航分為兩部分,第一個部分為statusBarHeight,劉海屏手機(iPhone X,小米8等)會比其他的手機高很多,第二部分為titleBarHeight,安卓和IOS的高

小程式把玩二十七audio元件

音訊播放已經封裝的很好!只需配合屬性設定即可! (method和data配合使用) 主要屬性: wxml <audio action="{{action}}"

刷卡支付被掃支付

步驟: 1、掃碼 獲取被掃物件微信支付二維碼 獲得支付授權碼 即微信錢包→付款 裡面那個條形碼上面的那一串數字 2、把授權碼及所需要的引數傳給提交訂單api 3、用查詢訂單api查詢訂單付款情況 4、用while迴圈重複查詢10次 如果都是交易失敗就呼叫

php 實戰 公眾號 開發獲取使用者資訊

PHP 微信開發(獲取使用者資訊): 獲取使用者資訊的大致演算法是 使用者授權登入第三方網站, 重點:scope引數: snsapi_basic 靜默登入,不需要使用者授權,只能獲取到openid; snsapi_userinfo ,需要使用者點選授權

小程式四設定底部導航

好了 小程式的頭部標題 設定好了,我們來說說底部導航欄是如何實現的。 我們先來看個效果圖 這裡,我們添加了三個導航圖示,因為我們有三個頁面,微信小程式最多能加5個。 那他們是怎麼出現怎麼著色的呢?兩步就搞定! 1. 圖標準備 我們進入該網站,滑鼠滑到一個喜歡的圖示上面

小程式把玩二十八image元件

image元件也是一個程式不可缺少的,可以這樣說一個app中image元件隨處可以看到,一般 image有兩種載入方式第一種是網路圖片第二種是本地圖片資源,都用src屬性去指定。 重點屬性:

小程式把玩二十五loading元件

loading通常使用在請求網路資料時的一種方式,通過hidden屬性設定顯示與否 主要屬性: wxml <!----> <button type="primary"

在OpenJweb平臺中實現刷卡支付被動掃碼

微信刷卡支付流程:(1)顧客付款時,點微信錢包左上角的付款。(2)付款介面有二維碼、條碼和一排18位的數字,這個數字是有時間限制的,每分鐘重新整理一次。(3)商家POS機中錄完商品及價格後,用掃碼槍掃顧客手機中的條碼或二維碼,實際就是讀取顧客的18位的數字串,讀取到商家的系統

小程式把玩三十七location API

location API也就分這裡分兩種wx.getLocation(object)獲取當前位置和wx.openLocation(object)通過經緯度開啟內建地圖。其中定位獲取位置資訊返回引數是有問題的speed,accuracy這兩個是沒有的。還有

小程式把玩三十四Audio API

沒啥可值得太注意的地方 重要屬性: 1. wx.getBackgroundAudioPlayerState(object) 獲取播放狀態 2.wx.playBackgroundAu