Html5 Geolocation获取地理位置信息

Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置。基于此特性可以开发基于位置的服务应用。在获取地理位置信息前,首先浏览器都会向用户询问是否愿意共享其位置信息,待用户同意后才能使用。 Html5获取地理位置信息是通过Geolocation API提供,使用其getCurrentPosition方法,此方法中有三个参数,分别是成功获取到地理位置信息时所执行的回调函数,失败时所执行的回调函数和可选属性配置项。 如下Demo演示了通过Geolocation获取地理位置信息,并在百度地图上显示当前位置(通过调用百度地图API)。实验结果发现位置被定位到了大学城内环东四路入口处,与本人所在位置(华工学生宿舍)偏差还是有点大的,达到200-300米左右。 代码如下所示(其中convertor.js为百度地图提供的坐标转化文件): ![复制代码](http://common.cnblogs.com/images/copycode.gif) <span style="color: #008080;"> 1</span> <span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE html</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;"> 2</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;"> 3</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;"> 4</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span>H5地理位置Demo<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;"> 5</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script </span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="http://api.map.baidu.com/api?v=1.3"</span><span style="color: #ff0000;"> type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;"> 6</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;"> 7</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #ff0000;"> src</span><span style="color: #0000ff;">="convertor.js"</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;"> 8</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;"> 9</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;">10</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;">11</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">div </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="map"</span><span style="color: #ff0000;"> style</span><span style="color: #0000ff;">="width:600px; height:400px"</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;">12</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">div</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;">13</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;">14</span> <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;">15</span> <span style="color: #0000ff;">if</span> (window.navigator.geolocation) { <span style="color: #008080;">16</span> <span style="color: #0000ff;">var</span> options = { <span style="color: #008080;">17</span> enableHighAccuracy: <span style="color: #0000ff;">true</span>, <span style="color: #008080;">18</span> }; <span style="color: #008080;">19</span> window.navigator.geolocation.getCurrentPosition(handleSuccess, handleError, options); <span style="color: #008080;">20</span> } <span style="color: #0000ff;">else</span> { <span style="color: #008080;">21</span> alert("浏览器不支持html5来获取地理位置信息"); <span style="color: #008080;">22</span> } <span style="color: #008080;">23</span> <span style="color: #008080;">24</span> <span style="color: #0000ff;">function</span> handleSuccess(position){ <span style="color: #008080;">25</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 获取到当前位置经纬度 本例中是chrome浏览器取到的是google地图中的经纬度</span> <span style="color: #008080;">26</span> <span style="color: #0000ff;">var</span> lng = position.coords.longitude; <span style="color: #008080;">27</span> <span style="color: #0000ff;">var</span> lat = position.coords.latitude; <span style="color: #008080;">28</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 调用百度地图api显示</span> <span style="color: #008080;">29</span> <span style="color: #0000ff;">var</span> map = <span style="color: #0000ff;">new</span> BMap.Map("map"); <span style="color: #008080;">30</span> <span style="color: #0000ff;">var</span> ggPoint = <span style="color: #0000ff;">new</span> BMap.Point(lng, lat); <span style="color: #008080;">31</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 将google地图中的经纬度转化为百度地图的经纬度</span> <span style="color: #008080;">32</span> BMap.Convertor.translate(ggPoint, 2, <span style="color: #0000ff;">function</span>(point){ <span style="color: #008080;">33</span> <span style="color: #0000ff;">var</span> marker = <span style="color: #0000ff;">new</span> BMap.Marker(point); <span style="color: #008080;">34</span> map.addOverlay(marker); <span style="color: #008080;">35</span> map.centerAndZoom(point, 15); <span style="color: #008080;">36</span> }); <span style="color: #008080;">37</span> } <span style="color: #008080;">38</span> <span style="color: #008080;">39</span> <span style="color: #0000ff;">function</span> handleError(error){ <span style="color: #008080;">40</span> <span style="color: #008080;">41</span> } <span style="color: #008080;">42</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span> <span style="color: #008080;">43</span> <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span> ![复制代码](http://common.cnblogs.com/images/copycode.gif) convertor.js文件: ...

2014年9月22日 · 4 分钟 · 天边的星星

基于 html5 geolocation来获取经纬度地址

以前如果要获取互联网用户所在地都是根据用户的IP地址来获取地理位置,这样获取到的数据和真实数据有很大的偏差。为了获取更加精确的位置,可以使用了html5的geolocation来获取经纬度,然后再获取所在地理位置,如何获取,我在下面会说到。先说下基本概念。 Geolocation在的navigator 对象中,我们可以通过 navigator.geolocation 来使用它。不支持 geolocation 的浏览器并不包含这一对象,那么可以通过下面的代码来做能力检测,对不同的浏览器做不同的处理。在访问 geolocation 对象时,即调用 geolocation 下面的方法时,浏览器会弹出提示,询问用户是否许可网站提供的位置服务,只有在得到用户许可过后,服务才会继续,否则将被停止。 常用的navigator.geolocation对象有以下三种方法: 获取当前地理位置:navigator.geolocation.getCurrentPosition(success_callback_function, error_callback_function, position_options) 持续获取地理位置:navigator.geolocation.watchPosition(success_callback_function, error_callback_function, position_options) 清除持续获取地理位置事件:navigator.geolocation.clearWatch(watch_position_id) 参数position_options是配置项,由JSON格式传入: enableHighAccuracy:true/false,它将告诉浏览器是否启用高精度设备,所谓的高精度设备包含但不局限于前面所提到的 GPS 和 WIFI,值为 true 的时候,浏览器会尝试启用这些设备,默认指为 true,在这种情况下,浏览器会尽可能地进行更为精确的查询,简单地说,如果用户有可用的 GPS 设备,会返回 GPS 设备的查询结果,IP 是最后的选择,对于移动设备来说,网络接入点(基站)或许成为另一个选择,对此我还没有完全了解,但根据测试,即时没有任何额外功能的手机,也能够得到更为精确的查询结果。 maximumAge:单位毫秒,告诉设备缓存时间,主要用于设备的省电或者节省带宽方面。 timeout:单位毫秒,超时事件,获取位置信息时超出设定的这个时长,将会触发错误,捕获错误的函数将被调用,并且错误码指向TIMEOUT。 [?](http://www.cnblogs.com/zzcflying/archive/2012/08/30/2663540.html#) <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `var` `position_option = {` </div> <div class="line number2 index1 alt1"> ` ``enableHighAccuracy: ``true``,` </div> <div class="line number3 index2 alt2"> ` ``maximumAge: 30000,` </div> <div class="line number4 index3 alt1"> ` ``timeout: 20000` </div> <div class="line number5 index4 alt2"> ` ``};` </div> <div class="line number6 index5 alt1"> `navigator.geolocation.getCurrentPosition(getPositionSuccess, getPositionError, position_option);` </div> </div> </td> </tr> </table> [?](http://www.cnblogs.com/zzcflying/archive/2012/08/30/2663540.html#) <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `function` `getPositionSuccess( position ){` </div> <div class="line number2 index1 alt1"> ` ``var` `lat = position.coords.latitude;` </div> <div class="line number3 index2 alt2"> ` ``var` `lng = position.coords.longitude;` </div> <div class="line number4 index3 alt1"> ` ``alert( ``"您所在的位置: 纬度"` `+ lat + ``",经度"` `+ lng );` </div> <div class="line number5 index4 alt2"> ` ``if``(``typeof` `position.address !== ``"undefined"``){` </div> <div class="line number6 index5 alt1"> ` ``var` `country = position.address.country;` </div> <div class="line number7 index6 alt2"> ` ``var` `province = position.address.region;` </div> <div class="line number8 index7 alt1"> ` ``var` `city = position.address.city;` </div> <div class="line number9 index8 alt2"> ` ``alert(``' 您位于 '` `+ country + province + ``'省'` `+ city +``'市'``);` </div> <div class="line number10 index9 alt1"> ` ``}` </div> <div class="line number11 index10 alt2"> `}` </div> </div> </td> </tr> </table> coords其他返回信息: ...

2014年9月22日 · 2 分钟 · 天边的星星

Android常用组件

UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载、缓存、显示图片 ImageLoader:com.novoda.imageloader:异步加载、缓存、显示图片 picasso:com.squareup.picasso:功能强大的图片下载缓存库 PhotoView:uk\co\senab\photoview:支持缩放和各种手势的ImageView ListView JazzyListView:com.twotoasters.jazzylistview:扩展的ListView,当列表项目在屏幕上可见时产生动画效果 StickyListHeaders:com.emilsjolander.components.stickylistheaders:在ListView中置顶 ListViewAnimations:com.haarman.listviewanimations:带动画的ListView drag-sort-listview:???:拖拽排序ListView的元素 android-swipelistview:???:让listview的item可以向右滑动 下拉刷新 Android-PullToRefresh:com.handmark.pulltorefresh:下拉刷新组件 android-pulltorefresh:???:下拉刷新组件 ActionBar-PullToRefresh:???:下拉刷新组件,下拉时会替换掉ActionBar 菜单 SlidingMenu:com.jeremyfeinstein.slidingmenu:滑动菜单 MenuDrawer:???:滑动菜单组件 Action Bar ActionBarSherlock:com.actionbarsherlock:Action Bar组件 android-actionbar:???:Action Bar组件 GlassActionBar:???:玻璃效果的Action Bar ViewPager Android-ViewPagerIndicator:com.viewpagerindicator:分页显示组件 PagerSlidingTabStrip:com.astuetz.viewpager:页面滑动组件 JazzyViewPager:???:可自定义动画的ViewPager 兼容 NineOldAndroids:com.nineoldandroids:移植Honeycomb版本的动画API到旧版本上 HoloEverywhere:???:移植Android 4.1的Holo主题到旧的版本上 GlowPadBackport:GlowPadBackport:移植Android 4.2 GlowPadView到旧版本上 android-switch-backport:???:移植Android 4的Switch widget到旧版本上 AChartEngine:org.achartengine:Android上的绘图库 android-viewflow:com.taptwo.android.widget:视图切换的效果 android-flip:???:翻页动画组件 Android-AppMsg:???:In-layout notifications android-wheel:kankan.wheel:Android滚动控件 Android-ProgressFragment:???:等待数据的时候,支持显示等待符号的Fragment控件 StaggeredGridView:???:瀑布流GridView布局 Cards-UI:???:卡片布局 cardslib:???:卡片布局 Android-DragArea:???:拖拽排序 Android-StaggeredGrid: ???:类pinterest布局 FlipImageView: ???:通过扩展ImageView,实现了ImageView的各种翻转效果 SmoothProgressBar:???:平滑的ProgressBar,各种效果 SuperToasts:???:Toast的超强扩展 AndroidFloatLabel:???:Textview浮动提示 cropper:???:截图和旋转库 WebApp Cordova:org.apache.cordova:Cordova是PhoneGap贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码 HtmlSpanner:net.nightwhistler.htmlspanner:Android上的网页渲染库,可渲染CSS ChromeView:???:Chrome内核移植的WebView 推送 个推:com.igexin:手机推送服务 JPush:???:极光推送 百度推送:com.baidu.android.pushservice:百度推送服务 MQTT:ibm.mqtt:MQTT协议,似乎和推送有关系 语音识别 ...

2014年9月20日 · 2 分钟 · 天边的星星

Android之常用Tools【介绍及使用】

Android Tools - draw9patch - lint - hierarchyviewer - traceView - monkey 工具存放路径:sdk/tools/ draw9patch 介绍: 所谓&#8221;*.9.png&#8221;这是Android os里所支持的一种特殊的图片格式,用它可以实现部分拉伸;这种图片是经过”9妹“进行特殊处理过的,如果不处理的话,直接用PNG图就会有失真,拉伸不正常的现象出现。 使用: 双击打开看到 ![](http://img.blog.csdn.net/20140917141621430?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 然后将需要拉伸的图片直接拖进去进行拉伸,右侧是拉伸效果 ![](http://img.blog.csdn.net/20140917142108860?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 左侧和上方的黑线交叉的部分即可扩展区域 右侧和下方的黑线交叉的部分即内容显示区域(如做button背景图时,button上文字的显示区域) lint 介绍: Lint 是Android ADT 16引入的优化工具,它可以扫描你的代码,帮助发现潜在的问题,例如: 1.文本国际化(有些文本缺少其它语言版本)例如:layout文件中编写不规范的地方,会给出提示。考虑到国际化,如果直接在xml中写汉字会提醒你把文字写到string配置文件中 2.Layout的性能问题 3.无用的多余的资源 例如:项目中有哪些资源文件引入了却没有在代码中使用的话,会给提示。既包括图片资源、layout文件,也有定义的String常量和Color常量等。考虑到屏幕适配,如果有些图片只在高分辨率中放置了,会提醒你应该在中低分辨率的文件夹下也应该放置一份。 4.不一致的数组大小(在配置文件中) 5.重复的图标,图片 6.可用性问题(如没有为EditText指定 InputType) 7. Manifest xml配置错误。 使用: 有两种使用方式: 通过命令运行: lint 检查布局路径 然后返回检测结果 如图: ![](http://img.blog.csdn.net/20140917145229803?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 通过Eclipse直接运行: 选中项目右键-》AndroidTools-》Run Lint ![](http://img.blog.csdn.net/20140917145930984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 运行之后显示错误: ![](http://img.blog.csdn.net/20140917150320308?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 双击错误,还能跳到指定布局位置,右侧是错误详解。 hierarchyviewer 介绍: <span style="color: #2c2c2c;">HierarchyViewer能够</span>可视化的角度直观地获得<span lang="en-us">UI</span>布局设计结构和各种属性的信息,帮助我们优化布局设计。(也可以查看其他App的布局) 使用: 打开hierarchyviewer显示了一个虚拟器 ![](http://img.blog.csdn.net/20140917155910586?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 选中一个进程的界面,点击Load View Hierarchy 这个按钮,以微信个人界面为例: ![](http://img.blog.csdn.net/20140917161701531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 首先我们可以看到一个主布局,它下面的子布局是以树形的结构展示,看上去结构非常清晰. ![](http://img.blog.csdn.net/20140917162030437?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 接下来,我们在看看,子布局,可以从下图看到大家最喜欢的“摇一摇”功能条目,清晰的层级结构,以及控件的名称,还有效果图的展示,我们完全可以通过它给提供出来的数据,自己也实现这个布局,就算不去模仿他人的布局,我们也可以通过这个工具去分析我们自己的工程,这样可以更好及更快的找到我们需要优化的地方,进行布局优化。 ![](http://img.blog.csdn.net/20140917162645592?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 点击左下角的图标回到之前的操作界面界面,然后我们在选中微信进程,点击Inspet Screenshot 这个按钮.我们会看到 ![](http://img.blog.csdn.net/20140917163339212?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 从这个界面我们可以看到,控件的类名都已经一丝不挂了,这个界面,分为3部分,左边以树形结构显示布局类名,中间放大左边选中的区域以及,显示颜色值和坐标值,下面的工具条还能对选中区域进行所发,以及刷新频率。右边则可以通过鼠标随意移动,中间则实时刷新数据。 细心的朋友可以能会发现,左下角,3个按钮现在可以随意切换了,三个按钮功能分别是,主界面,布局分析界面,截屏分析界面。 traceView 介绍: TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析。 TraceView是图形化的工具,最终它会产生一个图表,用于对性能分析进行说明。 TraceView可以跟踪到具体的Method 使用: 限制条件: - 对于Android 1.5及以下的版本:不支持。 - 对于Android 1.5以上2.1下(含2.1)的版本:受限支持。trace文件只能生成到SD卡,且必须在程序中加入代码。 - 对于Android 2.2上(含2.2)的版本:全支持。可以不用SD卡,不用在程序中加代码,直接自己用DDMS就可以进程Traceview。 <div style="color: #362e2b;"> 我先演示一下,低版本的用代码,生成trace文件,然后打开分析。 </div> <div style="color: #362e2b;"> <div class="dp-highlighter bg_java"> <div class="bar"> <div class="tools" style="color: silver;"> **[java]** [view plain](http://blog.csdn.net/cym492224103/article/details/39343907#)[copy](http://blog.csdn.net/cym492224103/article/details/39343907#)[print](http://blog.csdn.net/cym492224103/article/details/39343907#)[?](http://blog.csdn.net/cym492224103/article/details/39343907#) <div> </div> </div> </div> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">package</span> com.example.traceviewdemo; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.app.Activity; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.app.ActionBar; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.app.Fragment; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.os.Bundle; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.os.Debug; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.LayoutInflater; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.Menu; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.MenuItem; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.View; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.view.ViewGroup; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">import</span> android.os.Build; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: blue;">public</span> <span class="keyword" style="font-weight: bold; color: blue;">class</span> MainActivity <span class="keyword" style="font-weight: bold; color: blue;">extends</span> Activity { </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">protected</span> <span class="keyword" style="font-weight: bold; color: blue;">void</span> onCreate(Bundle savedInstanceState) { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">super</span>.onCreate(savedInstanceState); </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// 开始</span> </span> - <span style="color: black;"> Debug.startMethodTracing(<span class="string" style="color: red;">&#8220;mytrace&#8221;</span>); </span> - <span style="color: black;"> setContentView(R.layout.activity_main); </span> - <span style="color: black;"> action(); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">protected</span> <span class="keyword" style="font-weight: bold; color: blue;">void</span> onDestroy() { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">super</span>.onDestroy(); </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// 停止</span> </span> - <span style="color: black;"> Debug.stopMethodTracing(); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">private</span> <span class="keyword" style="font-weight: bold; color: blue;">void</span> action(){ </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: blue;">for</span> (<span class="keyword" style="font-weight: bold; color: blue;">int</span> i = <span class="number" style="color: #c00000;"></span>; i < <span class="number" style="color: #c00000;">100000</span>; i++) { </span> - <span style="color: black;"> System.out.println(<span class="string" style="color: red;">&#8220;模拟耗时&#8221;</span>); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </span> - <span style="color: black;">} </span> </div> 需要添加权限: </div> <div style="color: #362e2b;"> <div class="dp-highlighter bg_html"> <div class="bar"> <div class="tools" style="color: silver;"> **[html]** [view plain](http://blog.csdn.net/cym492224103/article/details/39343907#)[copy](http://blog.csdn.net/cym492224103/article/details/39343907#)[print](http://blog.csdn.net/cym492224103/article/details/39343907#)[?](http://blog.csdn.net/cym492224103/article/details/39343907#) <div> </div> </div> </div> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: blue;"><</span><span class="tag-name" style="font-weight: bold; color: blue;">uses-permission</span> <span class="attribute" style="color: red;">android:name</span>=<span class="attribute-value" style="color: blue;">&#8220;android.permission.WRITE_EXTERNAL_STORAGE&#8221;</span> <span class="tag" style="font-weight: bold; color: blue;">/></span> </span> </div> 执行完后,会在sd卡生成一个mytrace.trace文件 </div> <div style="color: #362e2b;"> ![](http://img.blog.csdn.net/20140917173106006?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) </div> <div style="color: #362e2b;"> <span style="color: #4b4b4b;">我们把它导出,然后使用命令行执行分析该文件:</span><span style="color: #4b4b4b;">traceView 文件地址</span> </div> <div> ![](http://img.blog.csdn.net/20140917173247017?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) </div> <div> 显示下图: </div> <div> ![](http://img.blog.csdn.net/20140917175000815?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) </div> <div style="color: #4b4b4b;"> 从上图我们可以看到,MainActivity的action()是最耗时的方法,占用了95%的时候。如果在真实项目中,我们首先就是找到消耗性能的方法,然后对其优化, 还有很多属性大家可以看一下 </div> <div style="color: #4b4b4b;"> ![](http://img.blog.csdn.net/20140917175451646?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3ltNDkyMjI0MTAz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) </div> <div style="color: #4b4b4b;"> </div> <div style="color: #4b4b4b;"> 我们在看看,高版本不用代码如何使用traceView的做法 </div> <div style="color: #362e2b;"> 使用DDMS </div> <div style="color: #362e2b;"> 打开devices窗口,选择某个进程,点击右上角的start method profiling </div> <blockquote style="color: #362e2b;"> &nbsp; &nbsp; <div> 运行app一段时间后,再点击已变成stop method profiling的该按钮。eclipse会自动弹出debug的标签(可通过菜单File->save as保存数据)。界面同上 面。 </div> &nbsp; &nbsp; &nbsp; <div> 这种方式不需要修改代码,所以对于没有源码的程序同样可以进行排查。同时可以方便的进行全局性能排查 </div> &nbsp; </blockquote> monkey 介绍: Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。 使用: <blockquote style="color: #362e2b;"> &nbsp; 基本语法如下: &nbsp; <span class="katex math inline">adb shell monkey [options] &nbsp; 如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件: &nbsp;</span> adb shell monkey -p your.package.name -v 500 &nbsp; ## 命令选项参考 <wbr />

2014年9月20日 · 4 分钟 · 天边的星星

Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录

**1、 启动VSFTP服务器** A:cenos下运行:yum install vsftpd B. 登录Linux主机后,运行命令:”service vsftpd start” C. 要让FTP每次开机自动启动,运行命令: “chkconfig &#8211;level 35 vsftpd on” ** <div class="text"> <strong>2、设置FTP权限** </div> **<span style="color: #362e2b;">A. 编辑VSFTP配置文件,运行命令:”vi /etc/vsftpd/vsftpd.conf “ B. 将配置文件中”anonymous_enable=YES “改为 “anonymous_enable=NO” C. 保存修改,按ESC键,运行命令:“:wq”</span><br style="color: #362e2b;" /><span style="color: #362e2b;"> </span> <div style="color: #362e2b;"> 这样关闭了匿名登录功能。 <blockquote class="blockquote"> <div class="quote" style="color: #999999;"> </div> <div class="text"> <strong>3、添加FTP账号** </div> </blockquote> A. 登录Linux主机后,运行命令:”useradd ftpadmin -s /sbin/nologin “。该账户路径默认指向/home/ftpadmin目录;如果需要将用户指向其他目录,请运行命令:useradd ftpadmin -s /sbin/nologin –d /www(其他目录) B. 设置ftpadmin用户密码,运行命令:”passwd ftpadmin” ; 输入两次密码,匹配成功后,就设置好了ftpadmin用户的密码了。 C.测试连接,您可以在“我的电脑”地址栏中输入** ftp://IP **来连接FTP服务器,根据提示输入账户密码。</div> <div style="color: #362e2b;"> </div> <div style="color: #362e2b;"> ** <div class="quote" style="color: #999999;"> </div> <div class="text"> <strong>4、FTP数据传输注意事项** </div> </blockquote> A. 尽量把文件打包后上传。Linux无法识别RAR压缩包,可以使用ZIP压缩。 B.上传数据时请选择二进制编码,如果选择其他编码,可能会导致上传的压缩包无法打开。 </div> <div class="help-section" style="color: #362e2b;"> 以上内容是否已经解决了您的问题? </div> &nbsp; FTP服务器的默认目录是/var/ftp,而且当用户以匿名方式登录的时候,访问就是此目录。如果用户以其它的用户名登录的话,访问的则是那个用户名的工作目录。如果想要更改非匿名用户的默认FTP目录,可以采用如下方式进行更改: 1、进入/etc目录,打开passwd文件 2、转到想要更改的那个用户的行,编辑其工作目录为想要的目录即可 <span style="color: #362e2b;">一般采用此种方式带来的一个影响就是,shell的提示符不会再显示目录信息,如果想要变回原来的样子,可以采用如下简便的方法:把那个用户原来的工作目录下的所有与shell配置相关的文件复制到更改后的目录。</span> &nbsp; <span style="color: #000000;">最后重启服务: service vsftpd restart</span>

2014年9月16日 · 1 分钟 · 天边的星星

thinkphp去掉url中index.php

例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://localhost/test/index/add如何去掉index.php呢?1.httpd.conf配置文件中加载了mod_rewrite.so模块 //在APACHE里面去配置#LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉2.AllowOverride None 讲None改为 All //在APACHE里面去配置 (注意其他地方的AllowOverride也统统设置为ALL)<Directory “D:/server/apache/cgi-bin”>AllowOverride none 改 AllowOverride ALLOptions NoneOrder allow,denyAllow from all3.确保URL_MODEL设置为2,在项目的配置文件里写return Array( ‘URL_MODEL’ => ‘2’,);4 .htaccess文件必须放到跟目录下这个文件里面加:RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)index.php/1 [QSA,PT,L]补充:在windows下不能建立以点开头的文件,你可以先随便建立一个文件然后在DOS在操作 rename xxxx.xxxx .htaccess ...

2014年9月15日 · 1 分钟 · 天边的星星

file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did

例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://localhost/test/index/add如何去掉index.php呢?1.httpd.conf配置文件中加载了mod_rewrite.so模块 //在APACHE里面去配置#LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉2.AllowOverride None 讲None改为 All //在APACHE里面去配置 (注意其他地方的AllowOverride也统统设置为ALL)<Directory “D:/server/apache/cgi-bin”>AllowOverride none 改 AllowOverride ALLOptions NoneOrder allow,denyAllow from all3.确保URL_MODEL设置为2,在项目的配置文件里写return Array( ‘URL_MODEL’ => ‘2’,);4 .htaccess文件必须放到跟目录下这个文件里面加:RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)index.php/1 [QSA,PT,L]补充:在windows下不能建立以点开头的文件,你可以先随便建立一个文件然后在DOS在操作 rename xxxx.xxxx .htaccess ...

2014年9月15日 · 1 分钟 · 天边的星星

纯代码实现CSS圆角

效果图 我这里说的是纯代码,是指的不使用图片实现圆角,图片实现圆角,这里就不说了。 纯代码实现圆角主要有3种方法: 第一种:CSS3圆角 `#chaomao{` <div class="line number2 index1 alt1"> ` ``border-radius:2px 2px 2px 2px;` </div> <div class="line number3 index2 alt2"> `}` </div> </div> </td> </tr> </table> </div> 上面代码的意思是左上、右上、右下、右下分别2px的圆角 当然也可以简写:border-radius:2px 方向是从左上到左下逆时针 也可以分别指定 `#chaomao{` <div class="line number2 index1 alt1"> ` ``border-top-left-radius:4px 2px;` </div> <div class="line number3 index2 alt2"> ` ``border-top-right-radius:3px 4px;` </div> <div class="line number4 index3 alt1"> ` ``border-bottom-right-radius:6px 2px;` </div> <div class="line number5 index4 alt2"> ` ``border-bottom-left-radius:3px 4px;` </div> <div class="line number6 index5 alt1"> `}` </div> </div> </td> </tr> </table> </div> 意思很简明 火狐等浏览器也支持自己的私有圆角属性 ...

2014年9月11日 · 7 分钟 · 天边的星星

CSS3实现圆形代码

.avatar-img {border-radius: 100%;width: 100%;max-width: 158px;} 参考w3c http://www.w3school.com.cn/css3/css3_border.asp

2014年9月11日 · 1 分钟 · 天边的星星

ImageView.ScaleType / android:scaleType值的意义区别

android:scaleType是控制图片如何resized/moved来匹对ImageView的size。 ImageView.ScaleType / android:scaleType值的意义区别: CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示 CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽) CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽 FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示 FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置 FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置 FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示 MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。</td> </tr> </tbody> </table>

2014年9月3日 · 1 分钟 · 天边的星星