package baidumapsdk.demo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.overlayutil.PoiOverlay; import com.baidu.mapapi.search.core.PoiInfo; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.geocode.GeoCodeResult; import com.baidu.mapapi.search.geocode.GeoCoder; import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener; import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption; import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult; 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.share.LocationShareURLOption; import com.baidu.mapapi.search.share.OnGetShareUrlResultListener; import com.baidu.mapapi.search.share.PoiDetailShareURLOption; import com.baidu.mapapi.search.share.ShareUrlResult; import com.baidu.mapapi.search.share.ShareUrlSearch; /** * 演示poi搜索功能 */ public class ShareDemoActivity extends Activity implements OnGetPoiSearchResultListener, OnGetShareUrlResultListener, OnGetGeoCoderResultListener, BaiduMap.OnMarkerClickListener { private MapView mMapView = null; private PoiSearch mPoiSearch = null; // 搜索模块,也可去掉地图模块独立使用 private ShareUrlSearch mShareUrlSearch = null; private GeoCoder mGeoCoder = null; // 保存搜索结果地址 private String currentAddr = null; // 搜索城市 private String mCity = "北京"; // 搜索关键字 private String searchKey = "餐馆"; // 反地理编译点坐标 private LatLng mPoint = new LatLng(40.056878, 116.308141); private BaiduMap mBaiduMap = null; private Marker mAddrMarker = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_share_demo_activity); mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); mPoiSearch = PoiSearch.newInstance(); mPoiSearch.setOnGetPoiSearchResultListener(this); mShareUrlSearch = ShareUrlSearch.newInstance(); mShareUrlSearch.setOnGetShareUrlResultListener(this); mGeoCoder = GeoCoder.newInstance(); mGeoCoder.setOnGetGeoCodeResultListener(this); } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onDestroy() { mMapView.onDestroy(); mPoiSearch.destroy(); mShareUrlSearch.destroy(); super.onDestroy(); } public void sharePoi(View view) { // 发起poi搜索 mPoiSearch.searchInCity((new PoiCitySearchOption()).city(mCity) .keyword(searchKey)); Toast.makeText(this, "在" + mCity + "搜索 " + searchKey, Toast.LENGTH_SHORT).show(); } public void shareAddr(View view) { // 发起反地理编码请求 mGeoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(mPoint)); Toast.makeText( this, String.format("搜索位置: %f,%f", mPoint.latitude, mPoint.longitude), Toast.LENGTH_SHORT).show(); } @Override public void onGetPoiResult(PoiResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(ShareDemoActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show(); return; } mBaiduMap.clear(); PoiShareOverlay poiOverlay = new PoiShareOverlay(mBaiduMap); mBaiduMap.setOnMarkerClickListener(poiOverlay); poiOverlay.setData(result); poiOverlay.addToMap(); poiOverlay.zoomToSpan(); } @Override public void onGetPoiDetailResult(PoiDetailResult result) { } @Override public void onGetPoiDetailShareUrlResult(ShareUrlResult result) { // 分享短串结果 Intent it = new Intent(Intent.ACTION_SEND); it.putExtra(Intent.EXTRA_TEXT, "您的朋友通过百度地图SDK与您分享一个位置: " + currentAddr + " -- " + result.getUrl()); it.setType("text/plain"); startActivity(Intent.createChooser(it, "将短串分享到")); } @Override public void onGetLocationShareUrlResult(ShareUrlResult result) { // 分享短串结果 Intent it = new Intent(Intent.ACTION_SEND); it.putExtra(Intent.EXTRA_TEXT, "您的朋友通过百度地图SDK与您分享一个位置: " + currentAddr + " -- " + result.getUrl()); it.setType("text/plain"); startActivity(Intent.createChooser(it, "将短串分享到")); } @Override public void onGetGeoCodeResult(GeoCodeResult result) { } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(ShareDemoActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show(); return; } mBaiduMap.clear(); mBaiduMap.setOnMarkerClickListener(this); mAddrMarker = (Marker) mBaiduMap.addOverlay(new MarkerOptions() .icon(BitmapDescriptorFactory .fromResource(R.drawable.icon_marka)) .title(result.getAddress()).position(result.getLocation())); } @Override public boolean onMarkerClick(Marker marker) { if (marker == mAddrMarker) { mShareUrlSearch .requestLocationShareUrl(new LocationShareURLOption() .location(marker.getPosition()).snippet("测试分享点") .name(marker.getTitle())); } return true; } /** * 使用PoiOverlay 展示poi点,在poi被点击时发起短串请求. */ private class PoiShareOverlay extends PoiOverlay { public PoiShareOverlay(BaiduMap baiduMap) { super(baiduMap); } @Override public boolean onPoiClick(int i) { PoiInfo info = getPoiResult().getAllPoi().get(i); currentAddr = info.address; mShareUrlSearch .requestPoiDetailShareUrl(new PoiDetailShareURLOption() .poiUid(info.uid)); return true; } } }