先看执行后的图吧:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

POI(Point of Interest)。中文能够翻译为“兴趣点”。在地理信息系统中。一个POI能够是一栋房子、一个商铺、一个邮筒、一个公交站等  具体:http://developer.baidu.com/map/sdkandev-4.htm

主要应用 MKSearch 类:

com.baidu.mapapi.search

类 MKSearch

  • java.lang.Object
  • com.baidu.mapapi.search.MKSearch

  • public class MKSearch
    extends java.lang.Object
    搜索服务.

    用于位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索

方法概要

方法 
限定符和类型 方法和说明
int busLineSearch(java.lang.String city,
java.lang.String busLineUid)

公交路线具体信息搜索 异步函数。返回结果在MKSearchListener里的onGetBusDetailResult方法通知
void destory()

销毁MKSearch 模块 , 当不再使用Search 功能时。须要调用此函数
int drivingSearch(java.lang.String startCity, MKPlanNode start,
java.lang.String endCity, MKPlanNode end)

驾乘路线搜索.
int drivingSearch(java.lang.String startCity, MKPlanNode start,
java.lang.String endCity, MKPlanNode end,
java.util.List<MKWpNode> wpNodes)

驾车路线搜索,可设置途经点 异步函数。返回结果在MKSearchListener里的onGetDrivingRouteResult方法通知
int geocode(java.lang.String strAddr,
java.lang.String city)

依据地址名获取地址信息 异步函数,返回结果在MKSearchListener里的onGetAddrResult方法通知
int getPoiPageCapacity()

返回每页容量
int goToPoiPage(int num)

获取指定页的的poi结果.
boolean init(BMapManager bmapMan, MKSearchListener listener)

初使化,使用完毕后。请调用 destroy 函数释放资源
int poiDetailSearch(java.lang.String uid)

poi具体信息检索
boolean poiDetailShareURLSearch(java.lang.String poiUid)

获取POI信息共享短url.
boolean poiRGCShareURLSearch(GeoPoint location,
java.lang.String name, java.lang.String address)

获取地址信息共享短URL.
int poiSearchInbounds(java.lang.String key, GeoPoint ptLB, GeoPoint ptRT)

依据范围和检索词发起范围检索.
int poiSearchInCity(java.lang.String city,
java.lang.String key)

城市poi检索.
int poiSearchNearBy(java.lang.String key, GeoPoint pt,
int radius)

依据中心点、半径与检索词发起周边检索.
int reverseGeocode(GeoPoint pt)

依据地理坐标点获取地址信息 异步函数,返回结果在MKSearchListener里的onGetAddrResult方法通知
int setDrivingPolicy(int policy)

设置驾车路线规划策略.
void setPoiPageCapacity(int num)

设置每页容量.
int setTransitPolicy(int policy)

设置路线规划策略.
int suggestionSearch(java.lang.String key,
java.lang.String city)

联想词检索,依据模糊的不完备的检索词返回精确的建议搜索词 异步函数,返回结果在MKSearchListener里的onGetSuggestionResult方法通知
int transitSearch(java.lang.String city, MKPlanNode start, MKPlanNode end)

公交路线搜索.
int walkingSearch(java.lang.String startCity, MKPlanNode start,
java.lang.String endCity, MKPlanNode end)

步行路线搜索.

通过上面的阅读应该有所了解了吧,直接代码了。

这里的代码和前面(http://blog.csdn.net/majianjie/article/details/27958929)的代码变化不大:

MainActivity.java

package com.majianjie.baidumap;

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast; import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MKMapViewListener;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.mapapi.map.PoiOverlay;
import com.baidu.mapapi.map.PopupClickListener;
import com.baidu.mapapi.map.PopupOverlay;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKShareUrlResult;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import com.example.baidumap.R; public class MainActivity extends Activity { //声明控件
private Button request;
private static StringBuilder sb = new StringBuilder();
private int i=1;
private Toast mToast=null;
private BMapManager mBMapManager=null;
private MapView mMapView = null; //MapView 是地图主控件
private MapController mMapController = null;//用MapController完毕地图控制 private LocationClient mLocClient;
public LocationData mLocData = null; private LocationOverlay myLocationOverlay = null;//定位图层
private boolean isRequest = false;//是否手动触发请求定位
private boolean isFirstLoc = true;//是否首次定位 private PopupOverlay mPopupOverlay = null;//弹出泡泡图层。浏览节点时使用
private View viewCache=null;
public BDLocation location = new BDLocation(); <span style="color:#ff6666;"> //POI
private MKSearch mMKSearch = null;
private Spinner detail;
private List<String> poi;
private ArrayAdapter< String> adapter;
private String poiName="";</span> @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //**使用地图sdk前需先初始化BMapManager。这个必须在setContentView()先初始化
mBMapManager = new BMapManager(this);
//第一个參数是API key, 第二个參数是经常使用事件监听,用来处理通常的网络错误,授权验证错误等,你也能够不加入这个回调接口
mBMapManager.init("LDtH1sVwr7kygaF0aTqaVwWU", new MKGeneralListener() {
//授权错误的时候调用的回调函数
@Override
public void onGetPermissionState(int iError) {
if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
showToast("API KEY错误, 请检查!");
}
}
//一些网络状态的错误处理回调函数
@Override
public void onGetNetworkState(int iError) {
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(getApplication(), "您的网络出错啦!", Toast.LENGTH_LONG).show();
}
}
});
//初始化
init();
//单击事件
click();
} //* 显示Toast消息
private void showToast(String msg){
if(mToast == null){
mToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
}else{
mToast.setText(msg);
mToast.setDuration(Toast.LENGTH_SHORT);
}
mToast.show();
}
private void click() { request.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
requestLocation();
}
}); }
@Override
protected void onResume() {
//MapView的生命周期与Activity同步。当activity挂起时需调用MapView.onPause()
mMapView.onResume();
mBMapManager.start();//又一次启动
mMKSearch.init(mBMapManager, new MySearchListener());
super.onResume();
}
@Override
protected void onPause() {
//MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()
mMapView.onPause();
super.onPause();
} private void init() {
//使用自定义的title,注意顺序
setContentView(R.layout.activity_main); //activity的布局 //这里是加入自定义的titlebtn.xml //通过id找到他们
mMapView = (com.baidu.mapapi.map.MapView) findViewById(R.id.bmapView);
mMapController=mMapView.getController(); //获取地图控制器
mMapController.enableClick(true); //设置地图是否响应点击事件
request=(Button)findViewById(R.id.request); viewCache = LayoutInflater.from(this).inflate(R.layout.pop_layout, null);
mPopupOverlay= new PopupOverlay(mMapView, new PopupClickListener() {// * 点击弹出窗体图层回调的方法
@Override
public void onClickedPopup(int arg0) {
//隐藏弹出窗体图层
mPopupOverlay.hidePop(); }
}); mMapController.enableClick(true); //* 设置地图是否响应点击事件 .
mMapController.setZoom(12); // * 设置地图缩放级别
mMapView.setBuiltInZoomControls(true); // * 显示内置缩放控件
mMapView.setTraffic(true); <span style="color:#ff6666;"> //poi
mMKSearch = new MKSearch();
detail=(Spinner)findViewById(R.id.detail);
poi = new ArrayList<String>();
poi.add("请选择");
poi.add("ATM");
poi.add("旅馆");
poi.add("餐厅");
poi.add("公园");
poi.add("药店");
poi.add("图书馆");
poi.add("景点");
poi.add("医院");
poi.add("KFC");
poi.add("学校");
poi.add("超市");
</span> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,poi);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
detail.setAdapter(adapter);
detail.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View v,int position, long id) {
poiName=(parent.getSelectedItem().toString());
if(poiName.equals("请选择")){}
else{
mMKSearch.init(mBMapManager, new MySearchListener());//注意,MKSearchListener仅仅支持一个。以最后一次设置为准
mMKSearch.poiSearchNearBy(poiName, new GeoPoint((int) (39.907004 * 1E6), (int) (119.54048 * 1E6)), 5000);
} }
@Override
public void onNothingSelected(AdapterView<? > arg0) {}
}); mLocData = new LocationData(); mLocClient = new LocationClient(getApplicationContext()); // 定位SDK的核心类
//实例化定位服务。LocationClient类必须在主线程中声明
mLocClient.registerLocationListener(new BDLocationListenerImpl());//注冊定位监听接口
/**
* 设置定位參数
*/
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); //打开GPRS
option.setAddrType("all");//返回的定位结果包括地址信息
option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000); //设置发起定位请求的间隔时间为5000ms
option.disableCache(false);//禁止启用缓存定位
//option.setPoiNumber(5); //最多返回POI个数
//option.setPoiDistance(1000); //poi查询距离
//option.setPoiExtraInfo(true); //是否须要POI的电话和地址等具体信息 mLocClient.setLocOption(option);
mLocClient.start(); // 调用此方法開始定位 myLocationOverlay = new LocationOverlay(mMapView);//定位图层初始化 //将定位数据设置到定位图层里
myLocationOverlay.setMarker(getResources().getDrawable(R.drawable.set));
//加入定位图层
mMapView.getOverlays().add(myLocationOverlay);
myLocationOverlay.enableCompass(); //更新图层数据运行刷新后生效
mMapView.refresh(); /*
//准备要加入的Overlay
double mLat1 = 39.910159;
double mLon1 = 119.544697; // 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)
GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6)); //准备overlay图像数据,依据实情情况修复
Drawable mark= getResources().getDrawable(R.drawable.set);
//用OverlayItem准备Overlay数据
OverlayItem item1 = new OverlayItem(p1,"item1","item1");
//使用setMarker()方法设置overlay图片,假设不设置则使用构建ItemizedOverlay时的默认设置 //创建IteminizedOverlay
CustomItemizedOverlay itemOverlay = new CustomItemizedOverlay(mark, mMapView);
//将IteminizedOverlay加入到MapView中 mMapView.getOverlays().clear();
mMapView.getOverlays().add(itemOverlay); //如今全部准备工作已准备好,使用下面方法管理overlay.
//加入overlay, 当批量加入Overlay时使用addItem(List<OverlayItem>)效率更高
itemOverlay.addItem(item1);
//删除overlay .
//itemOverlay.removeItem(itemOverlay.getItem(0));
//mMapView.refresh();
//清除overlay
// itemOverlay.removeAll();
// mMapView.refresh();
mMapView.refresh();
*/ // mMapController.setCenter(p1); mMapView.regMapViewListener(mBMapManager, new MKMapViewListener() {
// * 地图移动完毕时会回调此接口 方法
@Override
public void onMapMoveFinish() {
//showToast("地图移动完毕。");
}
//* 地图加载完毕回调此接口方法
@Override
public void onMapLoadFinish() {
showToast("地图加载完毕!");
}
//* 地图完毕带动画的操作(如: animationTo())后。此回调被触发
@Override
public void onMapAnimationFinish() { }
//当调用过 mMapView.getCurrentMap()后,此回调会被触发 可在此保存截图至存储设备
@Override
public void onGetCurrentMap(Bitmap arg0) {
}
//* 点击地图上被标记的点回调此方法
@Override
public void onClickMapPoi(MapPoi arg0) {
if (arg0 != null){
showToast(arg0.strText);
}
}
}); } class MySearchListener implements MKSearchListener{
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {}
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
if (result == null) {
return;
}
// 清除地图上已有的全部覆盖物
mMapView.getOverlays().clear();
// PoiOverlay是baidu map api提供的用于显示POI的Overlay
PoiOverlay poioverlay = new PoiOverlay(MainActivity.this, mMapView);
// 设置搜索到的POI数据
poioverlay.setData(result.getAllPoi());
// 在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上)
mMapView.getOverlays().add(poioverlay); if(result.getNumPois() > 0) {
// 设置当中一个搜索结果所在地理坐标为地图的中心
MKPoiInfo poiInfo = result.getPoi(0);
mMapController.setCenter(poiInfo.pt);
} // sb.append("共搜索到").append(result.getNumPois()).append("个POI\n");
sb.append("POI信息:").append("\n");
// 遍历当前页返回的POI(默认仅仅返回10个)
for (MKPoiInfo poiInfo : result.getAllPoi()) {
sb.append(i+" 名称:").append(poiInfo.name).append("\n");
sb.append("地址:").append(poiInfo.address).append("\n");
i++;
} // 通过AlertDialog显示当前页搜索到的POI
new AlertDialog.Builder(MainActivity.this)
.setTitle("搜索到的POI信息")
.setMessage(sb.toString())
.setPositiveButton("关闭", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
sb.delete(0,sb.length());
i=1; }
}).create().show();
} @Override
public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1,int arg2) {}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {}
@Override /** * 公交换乘路线搜索结果 * * @param result 搜索结果 * @param iError 错误号(0表示正确返回) */
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {}
@Override /** * 步行路线搜索结果 * * @param result 搜索结果 * @param iError 错误号(0表示正确返回) */
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {} } @Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
} private void CreateMenu(Menu menu){
MenuItem mnu1 =menu.add(0,0,0,"显示卫星地图");
{
mnu1.setAlphabeticShortcut('a');//设置快捷键
//mnu1.serIcon(R.drawable.icon);//设置图片
}
MenuItem mnu2 =menu.add(0,1,1,"显示街道地图");
{
mnu2.setAlphabeticShortcut('b');//设置快捷键
//mnu1.serIcon(R.drawable.icon);//设置图片
}
MenuItem mnu3 =menu.add(0,2,2,"3D地图");
{
mnu3.setAlphabeticShortcut('c');//设置快捷键
//mnu1.serIcon(R.drawable.icon);//设置图片
}
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == 0){
mMapView.setSatellite(true); //设置显示为卫星地图:
mMapView.setTraffic(false);
}else if(item.getItemId() == 1){
mMapView.setTraffic(true); //显示街道地图
mMapView.setSatellite(false);
}else if(item.getItemId() == 2){
//mMapView.se
}
return true;
} public class BDLocationListenerImpl implements BDLocationListener {
// * 接收异步返回的定位结果。參数是BDLocation类型參数
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null) {
return;
}
MainActivity.this.location = location; mLocData.latitude = location.getLatitude();
mLocData.longitude = location.getLongitude();
//假设不显示定位精度圈,将accuracy赋值为0就可以
mLocData.accuracy = location.getRadius();
mLocData.direction = location.getDerect(); //将定位数据设置到定位图层里
myLocationOverlay.setData(mLocData);
//更新图层数据运行刷新后生效
mMapView.refresh(); if(isFirstLoc || isRequest){
//将给定的位置点以动画形式移动至地图中心
mMapController.animateTo(new GeoPoint(
(int) (location.getLatitude() * 1e6), (int) (location.getLongitude() * 1e6)));
showPopupOverlay(location); //加载时候就弹出
isRequest = false;
}
isFirstLoc = false; } // 接收异步返回的POI查询结果。參数是BDLocation类型參数
@Override
public void onReceivePoi(BDLocation poiLocation) { } } private void requestLocation() {
isRequest = true;
if(mLocClient != null && mLocClient.isStarted()){
showToast("正在定位......");
mLocClient.requestLocation();
}
} //继承MyLocationOverlay重写dispatchTap方法
private class LocationOverlay extends MyLocationOverlay{ public LocationOverlay(MapView arg0) {
super(arg0);
}
// * 在“我的位置”坐标上处理点击事件。
@Override
protected boolean dispatchTap() {
//点击我的位置显示PopupOverlay
showPopupOverlay(location);
return super.dispatchTap();
}
@Override
public void setMarker(Drawable arg0) {
super.setMarker(arg0);
} } @Override
protected void onDestroy() {
//MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()
mMapView.destroy(); //退出应用调用BMapManager的destroy()方法
if(mBMapManager != null){
mBMapManager.destroy();
mBMapManager = null;
} //退出时销毁定位
if (mLocClient != null){
mLocClient.stop();
} super.onDestroy();
} //* 显示弹出窗体图层PopupOverlay
private void showPopupOverlay(BDLocation location){
TextView popText = ((TextView)viewCache.findViewById(R.id.location_tips));
popText.setText("[我的位置]\n" + location.getAddrStr());
mPopupOverlay.showPopup(getBitmapFromView(popText),
new GeoPoint((int)(location.getLatitude()*1e6), (int)(location.getLongitude()*1e6)),
15); } // * 将View转换成Bitmap的方法
public static Bitmap getBitmapFromView(View view) {
view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
return bitmap;
} }

有关性能的优化,这里不多解说,正在学习中。

。。/呵呵

Android应用中使用百度地图API之POI(三)的更多相关文章

  1. Android应用中使用百度地图API并加入标注(一)

    网上一些资料这样的的内容已经过时了,这里是最新的内容,假设哪里不正确,请吐槽... 1)下载百度地图移动版API(Android)开发包       要在Android应用中使用百度地图API,就须要 ...

  2. Android应用中使用百度地图API定位自己的位置(二)

    官方文档:http://developer.baidu.com/map/sdkandev-6.htm#.E7.AE.80.E4.BB.8B3 百度地图SDK为开发人员们提供了例如以下类型的地图覆盖物: ...

  3. React中使用百度地图API

    今天我们来搞一搞如何在React中使用百度地图API好吧,最近忙的头皮发麻,感觉身体被掏空,所以很久都没来写博客了,但今天我一定要来一篇好吧 话不多说,我们直接开始好吧 特别注意:该React项目是用 ...

  4. 如何在网页中调用百度地图api

    我想在木有提供地图接口的年代,前端工程师门要么只写上企业的具体地址,要么就是用一张标有自己位置的地图图片.但是现在不一样啦!为了增强用户体验,谷歌,甚至百度都很开放了,你可以在他们的网站上找到地图接口 ...

  5. 如何在网中使用百度地图API自定义个性化地图

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. <Android 应用 之路> 百度地图API使用(2)

    简介 上一篇只是大致的提一下百度地图API的Android SDK的基本内容,然后抄袭一个官网上的Demo,今天看一下百度地图的第一部分,地图类型和基本的显示. 简单实战 不同类型地图的显示 //设置 ...

  7. ASP.NET中调用百度地图API

    1.打开链接http://developer.baidu.com/map/jshome.htm这里有很多DEMO,或者你直接百度搜索“百度地图API”,第一个就是.进入后有很多方向供你选择,由于现在开 ...

  8. <Android 应用 之路> 百度地图API使用(4)

    前言 百度地图的定位功能和基础地图功能是分开的,使用的是另外的jar包和so库文件,详情请关注官网: 百度定位SDK 配置 下载对应的jar包和so库,然后移动到lib目录下 AS中注意事项 sour ...

  9. <Android 应用 之路> 百度地图API使用(1)

    简介 详情请看百度地图官方网站 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction 使用方式 申请密钥,针对移动 ...

随机推荐

  1. NOIP2011选择客栈

    n家客栈,1~n编号,每家按照某一种色调装饰,共k种,每家客栈都设有咖啡店,每家咖啡店均有各自的最低消费两位游客,要求住在颜色相同,且不是同一个客栈,在两人的客栈间选择咖啡店(包括他们住的客栈),要求 ...

  2. 【bzoj1335】Radio Transmission

    给你一个字符串,它是由某个字符串不断自我连接形成的.但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 因为这个字符串是不断自匹配形成的我们可以很容易的想到,除了第一个字符串外,从第二个字符串 ...

  3. poj2778(AC 自动机)

    poj2778 题意 构造只包含 \(A, T, C, G\) 的字符串,且满足不出现指定的一些字符串,问长度为 \(n\) 的字符串有多少种 ? 分析 AC 自动机 + 矩阵快速幂的神题 ,知识点很 ...

  4. 见微知著(三):解析ctf中的pwn--Fastbin和bins的溢出

    1月1号写博客,也是不容易呀!大家新年快乐呀! 先从Fastbin看起,是2015年RCTF的一道pwn题,shaxian.先看看代码的大致流程,随便输入一下: 这个题目关键之处在于堆溢出,对于堆种类 ...

  5. ASP.net 资源请求漏洞利用工具PadBuster

    ASP.net 资源请求漏洞利用工具PadBuster 在ASP.net 网站中,为了便于部署网站项目,开发者往往会将资源(图片.Javascript文件)嵌入到dll文件中.而网页中,会使用WebR ...

  6. [LOJ6433]最大前缀和

    深刻感受到自己的水平和机房里的其他人相差甚远,他们都是随手秒这个题的... $n$很小,考虑状压DP 当一个序列在某个位置取到最大前缀和后,意味着如果把后面的数抽出来单独成序列,那么它的每个前缀和都$ ...

  7. 【置换群】CH Round #63 - OrzCC杯#2省选热身赛 exchange

    第一问置换群裸题. 第二问单独考虑某个循环,任意交换两个元素,稍微画一下就会发现,把该循环拆成了2个,剩下所需的交换次数减少了1,也就是说,第一步我们任意交换,都能够保证交换次数最少.于是一个循环的答 ...

  8. Android 智能指针学习 一

    Android5.1 中智能指针涉及的文件如下: system/core/include/utils/RefBase.h system/core/libutils/RefBase.cpp system ...

  9. js各种验证总结

    1.邮箱验证 function isEmail(str){ var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1 ...

  10. C++11简要介绍

    概述  C++1x (本教程中指 C++11/14, 甚至 C++17) 为传统 C++ 注入的大量特性使得整个 C++ 变得更加像一门现代化的语言.C++1x 不仅仅增强了 C++ 语言自身的可用性 ...