Android 百度地圖 熱點搜索(二)


1.OnGetPoiSearchResultListener 接口及方法:

   ①  OnGetPoiSearchResultListener接口  搜索結果監聽

OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener(){  
    public void onGetPoiResult(PoiResult result){  
    //獲取POI檢索結果  
    }  
    public void onGetPoiDetailResult(PoiDetailResult result){  
    //獲取Place詳情頁檢索結果  
    }  
};

   ②創建POI搜索實例

  PoiSearch    mPoiSearch  = PoiSearch.newInstance();    //創建POI搜索實例

   ③設置POI搜索監聽

  mPoiSearch.setOnGetPoiSearchResultListener(poiListener);

   ④發起搜索

   mPoiSearch.searchInCity(new PoiCitySearchOption().city(city)          //搜索所在城市
                                                    .keyword(keyWord)    //關鍵字
                                                    .pageNum(pageNum));   //頁數

   ⑤POI詳情搜索

mPoiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(UID));  //調用searchInCity返回的列表中每一項均包含UID,將這個值取出來
//OnGetPoiSearchResultListener 接口的第二個方法onGetPoiDetailResult
//會將搜索結果返回到這里

   ⑥釋放POI搜索實例

   mPoiSearch.destroy();    //搜索結束之后一定要釋放

 2.OnGetSuggestionResultListener 接口及方法,這個接口提供在線建議查詢功能,根據用戶輸入的關鍵字提供在線建議詞,SDK從3.5版本,開發查詢結果的經緯度信息及對應POI信息的UID信息

 注意:1) 在線建議檢索的本質是根據部分關鍵是檢索出來可能的完整關鍵詞名稱,如果需要這些關鍵詞對應的POI的具體信息,請使用POI檢索來完成;

    2)  在線檢索結果的第一條可能存在沒有經緯度信息的情況,該條結果為文字聯想出來的關鍵詞結果,並不對應任何確切POI點。例如輸入“肯”,第一條結果為“肯德基”,這條結果是一個泛指的名稱,不會帶有經緯度等信息。

  ①OnGetSuggestionResultListener 的實現

OnGetSuggestionResultListener listener = new OnGetSuggestionResultListener() {  
    public void onGetSuggestionResult(SuggestionResult res) {  
        if (res == null || res.getAllSuggestions() == null) {  
            return;  
            //未找到相關結果  
        }  
    //獲取在線建議檢索結果  
    }  
};

  

 3.附上我做的簡單封裝代碼,直接放進配置好的工程里可以直接調用

package com.example.baidumapdemo;

import java.util.List;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import com.baidu.mapapi.search.core.CityInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
import com.baidu.mapapi.search.sug.OnGetSuggestionResultListener;
import com.baidu.mapapi.search.sug.SuggestionResult;
import com.baidu.mapapi.search.sug.SuggestionResult.SuggestionInfo;
import com.baidu.mapapi.search.sug.SuggestionSearch;

/**
 * 
 * @author Administrator
 * OnGetPoiSearchResultListener    POI搜索監聽
 */
public class BaiduMapPoiSearchUtils implements OnGetPoiSearchResultListener,OnGetSuggestionResultListener{
    public PoiSearch                         mPoiSearch;
    private SuggestionSearch                mSuggestionSearch;
    //private InfoWindow                    mInfoWindow;
    
    private static BaiduMapPoiSearchUtils            mPoiSearchUtils;
    private Context                            context;
    
    private OnPoiSearchResultCallback        mOnPoiSearchResultCallback;
    private OnSuggestionResultCallback        mOnSuggestionResultCallback;
    private OnGetPoiDetailResultCallback    mOnGetPoiDetailResultCallback;
    private OnSearchErrorCallback            onSearchErrorCallback;
    
    private BaiduMapPoiSearchUtils(Context context){
        init(context);
    }
    
    public static BaiduMapPoiSearchUtils newInstance(Context context){
        if(mPoiSearchUtils == null){
            mPoiSearchUtils = new BaiduMapPoiSearchUtils(context);
        }
        return mPoiSearchUtils;
    }
    
    private void init(Context context){
        this.context      = context;
        mPoiSearch           = PoiSearch.newInstance();    //創建POI搜索實例
        mSuggestionSearch = SuggestionSearch.newInstance();
        mPoiSearch.setOnGetPoiSearchResultListener(this);
        mSuggestionSearch.setOnGetSuggestionResultListener(this);
    }
    
    /**
     * 熱點搜索結果
     * @param mOnPoiSearchResultCallback
     */
    public void setOnPoiSearchResultCallback(OnPoiSearchResultCallback mOnPoiSearchResultCallback){
        this.mOnPoiSearchResultCallback = mOnPoiSearchResultCallback;
    }
    
    /*
     * 搜索建議 
     */
    public void setOnSuggestionResultCallback(OnSuggestionResultCallback mOnSuggestionResultCallback){
        this.mOnSuggestionResultCallback = mOnSuggestionResultCallback;
    }
    
    /**
     * 搜搜詳情
     * @param mOnGetPoiDetailResultCallback
     */
    public void setOnGetPoiDetailResultCallback(OnGetPoiDetailResultCallback mOnGetPoiDetailResultCallback){
        this.mOnGetPoiDetailResultCallback = mOnGetPoiDetailResultCallback;
    }
    /**
     * 搜索出錯
     * @param onSearchErrorCallback
     */
    public void setOnSearchErrorCallback(OnSearchErrorCallback onSearchErrorCallback) {
        this.onSearchErrorCallback = onSearchErrorCallback;
    }

    public void startSearch(String city,String keyWord,int pageNum){
        mPoiSearch.searchInCity(new PoiCitySearchOption().city(city)
                                                         .keyword(keyWord)
                                                         .pageNum(pageNum));
    }
    
    @Override
    public void onGetSuggestionResult(SuggestionResult result) {
        if(result == null || result.error != SearchResult.ERRORNO.NO_ERROR){
            if(onSearchErrorCallback != null){
                onSearchErrorCallback.onGetPoiDetailResult();
            }
            return;
        }
        if(mOnSuggestionResultCallback != null){
            mOnSuggestionResultCallback.onSuggestionResult(result.getAllSuggestions());
        }
    }

    @Override
    public void onGetPoiDetailResult(PoiDetailResult result) {
        if(result == null || result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND){
            Toast.makeText(context, "未找到結果", Toast.LENGTH_SHORT).show();
            return;
        }
        if(mOnGetPoiDetailResultCallback != null){
            mOnGetPoiDetailResultCallback.onGetPoiDetailResult(result);
        }
    }

    @Override
    public void onGetPoiResult(PoiResult result) {
        if(result == null || result.error != SearchResult.ERRORNO.NO_ERROR){
            Toast.makeText(context, "未找到結果", Toast.LENGTH_SHORT).show();
            return;
        }
        if(mOnPoiSearchResultCallback != null){
            mOnPoiSearchResultCallback.onPoiSearchResult(result);
        }
        if(result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD){
            String strInfo = "在";
            for(CityInfo c:result.getSuggestCityList()){
                strInfo += c.city;
                strInfo += ",";
            }
            strInfo += "找到結果";
            Log.e("TAG", strInfo);
        }
    }
    
    public interface OnPoiSearchResultCallback{
        public void onPoiSearchResult(PoiResult result);
    }
    public interface OnSuggestionResultCallback{
        public void onSuggestionResult(List<SuggestionInfo> list);
    }
    public interface OnGetPoiDetailResultCallback{
        public void onGetPoiDetailResult(PoiDetailResult result);
    }
    public interface OnSearchErrorCallback{
        public void onGetPoiDetailResult();
    }
    public void onDestroy(){
        mPoiSearch.destroy();
        mSuggestionSearch.destroy();
    }
}

 百度地圖就先介紹到這,有時間會附上地圖上位置標記。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM