程序员常去的14个顶级开发社区

![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825091916_1.jpg) (via:[码农网](http://www.codeceo.com/article/14-communities-programmer-go.html)) 作为程序员,选择好合适的开发社区对提高自己的编程能力会有很大的帮助,我也说不出为什么,但是一些优秀的实时开发社区确实能帮你积累不少开发经验。 下面这张图列出了14个程序员经常逛的顶级开发社区,作为程序员,你应该要了解其中一个或者最好是多个,并且学会使用它们,利用里面的资源提高自己的编程能力。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825091956_1.png) **我们期望在开发者社区中获得什么?** 我们希望能得到切实的帮助,而不是获取一些唠叨的废话或者一些水文。我们希望能根据自己提出的问题来获得其他开发者的回答帮助或者讨论一些学习资源的问题。下图是一些开发者在社区中最关注的一些问题。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092021_1.png) 下面我们来看一下程序员经常去的14个顶级开发者社区,如果你还不知道它们,那么赶紧去看看,也许会有意想不到的收获。 [**Stack Overflow**](http://stackoverflow.com/) 9月份,Stack Overflow也将迎来其6岁的生日,毫无疑问,Stack Overflow是全球最受程序员欢迎的开发社区,而且也是内容最丰富的社区之一。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092045_1.png) [**Reddit**](http://www.reddit.com/r/programming) reddit也是一个非常富有个性的社区,你可以在reddit上提交一些感兴趣的话题,也可以和其他程序员讨论一些编程开发的问题和当前的IT热点资讯,reddit是一个用户粘性比较强的开放社区,编程开发板块只是其中的一小部分。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092058_1.png) [**Google+ Communities**](https://plus.google.com/communities) 加入Google+社区只需要一个Google账户即可,你可以完全免费的获取里面的资源。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092214_1.png) [**SitePoint**](http://www.sitepoint.com/forums/) SitePoint社区论坛也是我最喜欢的在线开发社区和程序员设计师家园之一,SitePoint主要目标是帮助初学者了解其选择的编程语言和技术,并且得到相应的提高,网站内容包括web开发、web设计、技术写作以及用户体验等。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092230_1.png) [**CodeProject**](http://www.codeproject.com/) 截止2013年8月,已经有100多万用户入驻codeproject,并且分享了约100多万个代码演示,在codeproject里,你可以将代码分享给你的朋友们。和其他社区不同的是,codeproject更加侧重软件开发,比如C, C#, C++, Java, Lisp等开发。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092244_1.png) [**Treehouse**](https://teamtreehouse.com/forum) 在寻找一个实惠的编程学习途径吗?你可以试试加入treehouse,它并不昂贵,年度会员还可以打折优惠。treehouse非常简单,你可以在上面找到各种等级的问题答案。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092303_1.png) [**Hacker News**](https://news.ycombinator.com/news) Hacker News这个名字已经刻在很多开发者心里了,在这里,可以实时看到编程界中发生的任何事情,包括一些学习的资源和教程。你可以从用户提交的数据中找到适合你的学习资源,比如文章、图像视频以及一些问题的讨论。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092320_1.png) [**DZone**](http://www.dzone.com/links/index.html) DZone是一个允许用户分享最新IT新闻和编程资源的社区,这是一个文章内容驱动的社区,所以需要许多内容管理员来把关文章的质量,从某种意义上说,它与HN和其他的编程社区类似,但是这个平台时间最长,里面的用户数量也是最多的。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092333_1.png) [**Bytes**](http://bytes.com/) Bytes是一个传统的开发社区,新手和专家都可以在里面讨论一些关于软件开发、数据库开发以及网络和系统管理的问题。数据库、网络以及系统是编程的基础,我们需要关注这方面的问题,从而能更好的帮助我们提高编程能力。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092347_1.png) [**DaniWeb**](http://www.daniweb.com/) DaniWeb以前是专为市场营销业务分析人员设计的,但是现在主要为各个年龄段的Web开发者和程序员服务。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092358_1.png) [**Dream In Code**](http://www.dreamincode.net/forums/) 这几年,它的更新比较缓慢了,这有好的一面也有坏的一面,60w的用户以及百万及的文章,内容涵盖 Java, C++, VB.NET等,学习资源相当丰富。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092413_1.png) [**Tech.Pro**](http://tech.pro/) Tech.pro是一个关注科技领域发展的相关资讯的社区,Tech.pro是一个获取资源和教程的入门网站,包含一些技术教程、讨论、博客已经链接等。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092424_1.png) [**Pineapple**](http://pineapple.io/) 也许这还算不上活跃的优秀开发社区,但是这里也包含很多有用的工具、教程以及类库资源等。我在几个月前开始使用Pineapple,现在已经比较依赖它了。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092439_1.png) [**Lobsters**](https://lobste.rs/) 这是一个用户邀请制的开发社区,是一个真正“面向社交”的社区,你可以在里面找到大量的关于编程的任何讨论,很多信息都至少有20多条回帖,这些信息或许对你会有很大帮助。 ![](http://www.cocoachina.com/cms/uploads/allimg/140825/4196_140825092451_1.png)

2014年8月31日 · 1 分钟 · 天边的星星

微信开发值得推荐的开源项目

Wechat-PHP-SDK 微信公众平台 PHP 开发包,细化各项接口操作,支持链式调用。 Github托管地址:dodgepudding/wechat-php-sdk 微信公众平台 PHP SDK 简单的微信公众平台 PHP SDK ,通过调用相应的接口,使你可以轻松地开发微信 App 。 Github托管地址:netputer/wechat-php-sdk Wechat-php 本微信SDK实现了被动响应的官方 API 已经主动发送消息给订阅用户,主动批量发送消息给订阅用户。 Github托管地址:ligboy/Wechat-php 非常强大的微信公众平台开发框架推荐中有官方和第三方开发者提供的丰富的插件,是免费并且成熟的框架,更多的信息可以点击这里: 微擎:http://www.we7.cc/ 微笑:http://www.sylai.com/ weiphp:http://www.weiphp.cn/

2014年8月29日 · 1 分钟 · 天边的星星

AlarmManager类的应用(实现闹钟功能)

1、AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用,实现闹钟等提示功能 2、AlarmManager的常用方法有三个: (1)set(int type,long startTime,PendingIntent pi); 该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。 (2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi); 该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。 (3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi); 该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。 3、三个方法各个参数详悉: (1)int type:闹钟的类型,常用的有5个值:AlarmManager.ELAPSED_REALTIME、AlarmManager.ELAPSED_REALTIME_WAKEUP、AlarmManager.RTC、AlarmManager.RTC_WAKEUP、AlarmManager.POWER_OFF_WAKEUP。 AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3; AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2; AlarmManager.RTC表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1; AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0; AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持; (2)long startTime:闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关,如果第一个参数对应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(相对于系统启动时间来说),比如当前时间就表示为:SystemClock.elapsedRealtime();如果第一个参数对应的闹钟使用的是绝对时间(RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本属性就得使用绝对时间,比如当前时间就表示为:System.currentTimeMillis()。 (3)long intervalTime:对于后两个方法来说,存在本属性,表示两次闹钟执行的间隔时间,也是以毫秒为单位。 (4)PendingIntent pi:是闹钟的执行动作,比如发送一个广播、给出提示等等。PendingIntent是Intent的封装类。需要注意的是,如果是通过启动服务来实现闹钟提示的话,PendingIntent对象的获取就应该采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。 ...

2014年8月28日 · 2 分钟 · 天边的星星

android 选择图片或拍照时旋转了90度问题

由于前面的博文中忽略了点内容,所以在这里补上,下面内容就是解决拍照或者选择图片显示的时候图片旋转了90度或者其他度数问题,以便照片可以正面显示:具体如下: 首先直接看上面博文下的拍完照或者选完图后处理部分: <div id="" class="dp-highlighter" style="color: #000000;"> <div class="bar"> <div class="tools" style="font-weight: bold;"> Java代码 <a style="color: #108ac6;" title="收藏这段代码">![收藏代码](http://104zz.iteye.com/images/icon_star.png)</a> </div> </div> - <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: #7f0055;">protected</span> <span class="keyword" style="font-weight: bold; color: #7f0055;">void</span> onActivityResult(<span class="keyword" style="font-weight: bold; color: #7f0055;">int</span> requestCode, <span class="keyword" style="font-weight: bold; color: #7f0055;">int</span> resultCode, Intent data) { </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">switch</span> (resultCode) { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">case</span> <span class="number" style="color: #c00000;">1</span>: </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">if</span> (data != <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span>) { </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// 取得返回的Uri,基本上选择照片的时候返回的是以Uri形式,但是在拍照中有得机子呢Uri是空的,所以要特别注意</span> </span> - <span style="color: black;"> Uri mImageCaptureUri = data.getData(); </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// 返回的Uri不为空时,那么图片信息数据都会在Uri中获得。如果为空,那么我们就进行下面的方式获取</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">if</span> (mImageCaptureUri != <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span>) { </span> - <span style="color: black;"> setImage(mImageCaptureUri);<span class="comment" style="color: #008200;">// 根据Uri处理并显示图片</span> </span> - <span style="color: black;"> } </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">break</span>; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">default</span>: </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">break</span>; </span> - <span style="color: black;"> </span> - <span style="color: black;"> } </span> - <span style="color: black;"> } </span> </div> 第二:处理90度问题并显示: <div id="" class="dp-highlighter" style="color: #000000;"> <div class="bar"> <div class="tools" style="font-weight: bold;"> Java代码 <a style="color: #108ac6;" title="收藏这段代码">![收藏代码](http://104zz.iteye.com/images/icon_star.png)</a> </div> </div> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #7f0055;">private</span> <span class="keyword" style="font-weight: bold; color: #7f0055;">void</span> setImage(Uri mImageCaptureUri) { </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// 不管是拍照还是选择图片每张图片都有在数据中存储也存储有对应旋转角度orientation值</span> </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// 所以我们在取出图片是把角度值取出以便能正确的显示图片,没有旋转时的效果观看</span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> ContentResolver cr = <span class="keyword" style="font-weight: bold; color: #7f0055;">this</span>.getContentResolver(); </span> - <span style="color: black;"> Cursor cursor = cr.query(mImageCaptureUri, <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span>, <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span>, <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span>, <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span>);<span class="comment" style="color: #008200;">// 根据Uri从数据库中找</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">if</span> (cursor != <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span>) { </span> - <span style="color: black;"> cursor.moveToFirst();<span class="comment" style="color: #008200;">// 把游标移动到首位,因为这里的Uri是包含ID的所以是唯一的不需要循环找指向第一个就是了</span> </span> - <span style="color: black;"> String filePath = cursor.getString(cursor.getColumnIndex(<span class="string" style="color: blue;">&#8220;_data&#8221;</span>));<span class="comment" style="color: #008200;">// 获取图片路</span> </span> - <span style="color: black;"> String orientation = cursor.getString(cursor </span> - <span style="color: black;"> .getColumnIndex(<span class="string" style="color: blue;">&#8220;orientation&#8221;</span>));<span class="comment" style="color: #008200;">// 获取旋转的角度</span> </span> - <span style="color: black;"> cursor.close(); </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">if</span> (filePath != <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span>) { </span> - <span style="color: black;"> Bitmap bitmap = BitmapFactory.decodeFile(filePath);<span class="comment" style="color: #008200;">//根据Path读取资源图片</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">int</span> angle = <span class="number" style="color: #c00000;"></span>; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">if</span> (orientation != <span class="keyword" style="font-weight: bold; color: #7f0055;">null</span> && !<span class="string" style="color: blue;">&#8220;&#8221;</span>.equals(orientation)) { </span> - <span style="color: black;"> angle = Integer.parseInt(orientation); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">if</span> (angle != <span class="number" style="color: #c00000;"></span>) { </span> - <span style="color: black;"> <span class="comment" style="color: #008200;">// 下面的方法主要作用是把图片转一个角度,也可以放大缩小等</span> </span> - <span style="color: black;"> Matrix m = <span class="keyword" style="font-weight: bold; color: #7f0055;">new</span> Matrix(); </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">int</span> width = bitmap.getWidth(); </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #7f0055;">int</span> height = bitmap.getHeight(); </span> - <span style="color: black;"> m.setRotate(angle); <span class="comment" style="color: #008200;">// 旋转angle度</span> </span> - <span style="color: black;"> bitmap = Bitmap.createBitmap(bitmap, <span class="number" style="color: #c00000;"></span>, <span class="number" style="color: #c00000;"></span>, width, height, </span> - <span style="color: black;"> m, <span class="keyword" style="font-weight: bold; color: #7f0055;">true</span>);<span class="comment" style="color: #008200;">// 从新生成图片</span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> } </span> - <span style="color: black;"> photo.setImageBitmap(bitmap); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> } </span> - <span style="color: black;">} </span> </div> <span style="color: #000000;"> OK完成</span>

2014年8月28日 · 4 分钟 · 天边的星星

Android开发之拍照功能实现(附源码)

大家好,这是一个简单的拍照功能,很简单的界面,一个显示图像区域SurfaceView一个“拍照”按钮。直接上代码! 1、CameraDemoActivity.java(主界面) - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">package</span> org.winplus.camera; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> java.io.File; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> java.io.FileOutputStream; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> java.io.IOException; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> java.util.Date; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.app.Activity; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.content.pm.ActivityInfo; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.graphics.PixelFormat; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.hardware.Camera; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.os.AsyncTask; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.os.Bundle; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.os.Environment; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.text.format.DateFormat; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.util.Log; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.KeyEvent; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.SurfaceHolder; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.SurfaceView; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.View; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.Window; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.view.View.OnClickListener; </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">import</span> android.widget.Button; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">class</span> CameraDemoActivity <span class="keyword" style="font-weight: bold; color: #0000ff;">extends</span> Activity{ </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">final</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">static</span> String TAG = <span class="string" style="color: #009900;">&#8220;CameraActivity&#8221;</span>; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> SurfaceView surfaceView; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> SurfaceHolder surfaceHolder; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> Camera camera; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> File picture; </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> Button btnSave; </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: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> onCreate(Bundle savedInstanceState) { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">super</span>.onCreate(savedInstanceState); </span> - <span style="color: black;"> setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">this</span>.requestWindowFeature(Window.FEATURE_NO_TITLE); </span> - <span style="color: black;"> setContentView(R.layout.main); </span> - <span style="color: black;"> setupViews(); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> setupViews(){ </span> - <span style="color: black;"> surfaceView = (SurfaceView) findViewById(R.id.camera_preview); <span class="comment" style="color: #999999;">// Camera interface to instantiate components</span> </span> - <span style="color: black;"> surfaceHolder = surfaceView.getHolder(); <span class="comment" style="color: #999999;">// Camera interface to instantiate components</span> </span> - <span style="color: black;"> surfaceHolder.addCallback(surfaceCallback); <span class="comment" style="color: #999999;">// Add a callback for the SurfaceHolder</span> </span> - <span style="color: black;"> surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); </span> - <span style="color: black;"> </span> - <span style="color: black;"> btnSave = (Button) findViewById(R.id.save_pic); </span> - <span style="color: black;"> </span> - <span style="color: black;"> btnSave.setOnClickListener(<span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> OnClickListener() { </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: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> onClick(View v) { </span> - <span style="color: black;"> takePic(); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> }); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </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: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">boolean</span> onKeyDown(<span class="keyword" style="font-weight: bold; color: #0000ff;">int</span> keyCode, KeyEvent event) { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">if</span> (keyCode == KeyEvent.KEYCODE_CAMERA </span> - <span style="color: black;"> || keyCode == KeyEvent.KEYCODE_SEARCH) { </span> - <span style="color: black;"> takePic(); </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">return</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">true</span>; </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">return</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">super</span>.onKeyDown(keyCode, event); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">private</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> takePic() { </span> - <span style="color: black;"> </span> - <span style="color: black;"> camera.stopPreview();<span class="comment" style="color: #999999;">// stop the preview</span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> camera.takePicture(<span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>, <span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>, pictureCallback); <span class="comment" style="color: #999999;">// picture</span> </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="comment" style="color: #999999;">// Photo call back</span> </span> - <span style="color: black;"> Camera.PictureCallback pictureCallback = <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> Camera.PictureCallback() { </span> - <span style="color: black;"> <span class="comment" style="color: #999999;">//@Override</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> onPictureTaken(<span class="keyword" style="font-weight: bold; color: #0000ff;">byte</span>[] data, Camera camera) { </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> SavePictureTask().execute(data); </span> - <span style="color: black;"> camera.startPreview(); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> }; </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="comment" style="color: #999999;">// save pic</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">class</span> SavePictureTask <span class="keyword" style="font-weight: bold; color: #0000ff;">extends</span> AsyncTask<<span class="keyword" style="font-weight: bold; color: #0000ff;">byte</span>[], String, String> { </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: #0000ff;">protected</span> String doInBackground(<span class="keyword" style="font-weight: bold; color: #0000ff;">byte</span>[]&#8230; params) { </span> - <span style="color: black;"> String fname = DateFormat.format(<span class="string" style="color: #009900;">&#8220;yyyyMMddhhmmss&#8221;</span>, <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> Date()).toString()+<span class="string" style="color: #009900;">&#8220;.jpg&#8221;</span>; </span> - <span style="color: black;"> </span> - <span style="color: black;"> Log.i(TAG, <span class="string" style="color: #009900;">&#8220;fname=&#8221;</span>+fname+<span class="string" style="color: #009900;">&#8220;;dir=&#8221;</span>+Environment.getExternalStorageDirectory()); </span> - <span style="color: black;"> <span class="comment" style="color: #999999;">//picture = new File(Environment.getExternalStorageDirectory(),fname);// create file</span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> picture = <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> File(Environment.getExternalStorageDirectory()+<span class="string" style="color: #009900;">&#8220;/&#8221;</span>+fname); </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">try</span> { </span> - <span style="color: black;"> FileOutputStream fos = <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> FileOutputStream(picture.getPath()); <span class="comment" style="color: #999999;">// Get file output stream</span> </span> - <span style="color: black;"> fos.write(params[<span class="number" style="color: #c00000;"></span>]); <span class="comment" style="color: #999999;">// Written to the file</span> </span> - <span style="color: black;"> fos.close(); </span> - <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #0000ff;">catch</span> (Exception e) { </span> - <span style="color: black;"> e.printStackTrace(); </span> - <span style="color: black;"> } </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">return</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>; </span> - <span style="color: black;"> } </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="comment" style="color: #999999;">// SurfaceHodler Callback handle to open the camera, off camera and photo size changes</span> </span> - <span style="color: black;"> SurfaceHolder.Callback surfaceCallback = <span class="keyword" style="font-weight: bold; color: #0000ff;">new</span> SurfaceHolder.Callback() { </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> surfaceCreated(SurfaceHolder holder) { </span> - <span style="color: black;"> Log.i(TAG, <span class="string" style="color: #009900;">&#8220;surfaceCallback====&#8221;</span>); </span> - <span style="color: black;"> camera = Camera.open(); <span class="comment" style="color: #999999;">// Turn on the camera</span> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">try</span> { </span> - <span style="color: black;"> camera.setPreviewDisplay(holder); <span class="comment" style="color: #999999;">// Set Preview</span> </span> - <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #0000ff;">catch</span> (IOException e) { </span> - <span style="color: black;"> camera.release();<span class="comment" style="color: #999999;">// release camera</span> </span> - <span style="color: black;"> camera = <span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>; </span> - <span style="color: black;"> } </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> surfaceChanged(SurfaceHolder holder, <span class="keyword" style="font-weight: bold; color: #0000ff;">int</span> format, <span class="keyword" style="font-weight: bold; color: #0000ff;">int</span> width, </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">int</span> height) { </span> - <span style="color: black;"> Log.i(TAG,<span class="string" style="color: #009900;">&#8220;====surfaceChanged&#8221;</span>); </span> - <span style="color: black;"> Camera.Parameters parameters = camera.getParameters(); <span class="comment" style="color: #999999;">// Camera parameters to obtain</span> </span> - <span style="color: black;"> parameters.setPictureFormat(PixelFormat.JPEG);<span class="comment" style="color: #999999;">// Setting Picture Format</span> </span> - <span style="color: black;"><span class="comment" style="color: #999999;">// parameters.set(&#8220;rotation&#8221;, 180); // Arbitrary rotation</span> </span> - <span style="color: black;"> camera.setDisplayOrientation(<span class="number" style="color: #c00000;"></span>); </span> - <span style="color: black;"><span class="comment" style="color: #999999;">// parameters.setPreviewSize(400, 300); // Set Photo Size</span> </span> - <span style="color: black;"> camera.setParameters(parameters); <span class="comment" style="color: #999999;">// Setting camera parameters</span> </span> - <span style="color: black;"> camera.startPreview(); <span class="comment" style="color: #999999;">// Start Preview</span> </span> - <span style="color: black;"> } </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #0000ff;">public</span> <span class="keyword" style="font-weight: bold; color: #0000ff;">void</span> surfaceDestroyed(SurfaceHolder holder) { </span> - <span style="color: black;"> Log.i(TAG,<span class="string" style="color: #009900;">&#8220;====surfaceDestroyed&#8221;</span>); </span> - <span style="color: black;"> camera.stopPreview();<span class="comment" style="color: #999999;">// stop preview</span> </span> - <span style="color: black;"> camera.release(); <span class="comment" style="color: #999999;">// Release camera resources</span> </span> - <span style="color: black;"> camera = <span class="keyword" style="font-weight: bold; color: #0000ff;">null</span>; </span> - <span style="color: black;"> } </span> - <span style="color: black;"> }; </span> - <span style="color: black;">} </span> <span style="color: #362e2b;">2、main.xml(布局文件)</span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><?</span><span class="tag-name" style="font-weight: bold; color: #993300;">xml</span> <span class="attribute" style="color: red;">version</span>=<span class="attribute-value" style="color: blue;">&#8220;1.0&#8221;</span> <span class="attribute" style="color: red;">encoding</span>=<span class="attribute-value" style="color: blue;">&#8220;utf-8&#8221;</span><span class="tag" style="font-weight: bold; color: #993300;">?></span> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">LinearLayout</span> <span class="attribute" style="color: red;">xmlns:android</span>=<span class="attribute-value" style="color: blue;">&#8220;http://schemas.android.com/apk/res/android&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">&#8220;fill_parent&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">&#8220;fill_parent&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:orientation</span>=<span class="attribute-value" style="color: blue;">&#8220;vertical&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">android.view.SurfaceView</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:id</span>=<span class="attribute-value" style="color: blue;">&#8220;@+id/camera_preview&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">&#8220;800dip&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">&#8220;600dip&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_alignParentTop</span>=<span class="attribute-value" style="color: blue;">&#8220;true&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_centerInParent</span>=<span class="attribute-value" style="color: blue;">&#8220;true&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_gravity</span>=<span class="attribute-value" style="color: blue;">&#8220;center_vertical|center_horizontal&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">Button</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:id</span>=<span class="attribute-value" style="color: blue;">&#8220;@+id/save_pic&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_width</span>=<span class="attribute-value" style="color: blue;">&#8220;fill_parent&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:layout_height</span>=<span class="attribute-value" style="color: blue;">&#8220;wrap_content&#8221;</span> </span> - <span style="color: black;"> <span class="attribute" style="color: red;">android:text</span>=<span class="attribute-value" style="color: blue;">&#8220;@string/txt_save&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"></</span><span class="tag-name" style="font-weight: bold; color: #993300;">LinearLayout</span><span class="tag" style="font-weight: bold; color: #993300;">></span> </span> <br style="color: #362e2b;" /><span style="color: #362e2b;">3、别忘了添加权限:</span> <div class="dp-highlighter bg_html" style="color: #362e2b;"> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">uses-permission</span> <span class="attribute" style="color: red;">android:name</span>=<span class="attribute-value" style="color: blue;">&#8220;android.permission.CAMERA&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">uses-feature</span> <span class="attribute" style="color: red;">android:name</span>=<span class="attribute-value" style="color: blue;">&#8220;android.hardware.camera&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span> - <span style="color: black;"><span class="tag" style="font-weight: bold; color: #993300;"><</span><span class="tag-name" style="font-weight: bold; color: #993300;">uses-feature</span> <span class="attribute" style="color: red;">android:name</span>=<span class="attribute-value" style="color: blue;">&#8220;android.hardware.camera.autofocus&#8221;</span> <span class="attribute" style="color: red;">android:required</span>=<span class="attribute-value" style="color: blue;">&#8220;false&#8221;</span> <span class="tag" style="font-weight: bold; color: #993300;">/></span> </span> </div> <div class="dp-highlighter bg_html" style="color: #362e2b;"> - <span style="color: black;"> </span> </div> [源码下载==》](http://download.csdn.net/detail/tangcheng_ok/3874071) 原创文章,转载请注明出处:http://www.blog.csdn.net/tangcheng_ok

2014年8月24日 · 10 分钟 · 天边的星星

使用startForeground让android服务前台运行

最近在使用android 4.1系统的时候,发现在手机休眠一段时间后(1-2小时),后台运行的服务被强行kill掉,有可能是系统回收内存的一种机制,要想避免这种情况可以通过startForeground让服务前台运行,当stopservice的时候通过stopForeground去掉。以下是android官方描述:Running a Service in the Foreground A foreground service(前台服务) is a service that’s considered to be(被用户所认可的) something the user is actively aware of and thus not a candidate for(而不是一个候选的,可以在内存不足时,被系统杀死的) the system to kill when low on memory. A foreground service must provide a notification for the status bar(前台服务必须提供一个显示通知), which is placed under the “Ongoing” heading(它是不可以忽略的), which means that the notification cannot be dismissed unless the service is either stopped or removed from the foreground.(意思是通知信息不能被忽略,除非服务停止或主动移除,否则将一直显示。) For example, a music player that plays music from a service should be set to run in the foreground, because the user is explicitly aware of its operation(用户明确了解其运作). The notification in the status bar might indicate the current song and allow the user to launch an activity to interact with the music player.To request that your service run in the foreground, call startForeground(). This method takes two parameters: an integer that uniquely identifies the notification and the Notification for the status bar. For example:Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),System.currentTimeMillis());Intent notificationIntent = new Intent(this, ExampleActivity.class);PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);notification.setLatestEventInfo(this, getText(R.string.notification_title),getText(R.string.notification_message), pendingIntent);startForeground(ONGOING_NOTIFICATION, notification);To remove the service from the foreground, call stopForeground(). This method takes a boolean, indicating whether to remove the status bar notification as well. This method does not stop the service. However, if you stop the service while it’s still running in the foreground, then the notification is also removed. ...

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

Android开发:优化电池续航-监听电量和充电状态

翻自:http://developer.android.com/training/monitoring-device-state/battery-monitoring.html 当你在更改后台更新频率来减少这些更新对电池寿命的影响时,检查当前电量和充电状态是一个好的开始。 电池寿命通过剩余电量和充电状态来影响应用更新的执行。当用交流电充电时,执行更新操作对设备的影响是微不足道的,所以在大多数案例里,你可以把更新频率调到最快。如果设备不在充电,降低更新频率可以帮助延长电池寿命。 类似的,你可以检查电池剩余电量级别,在电量低时,应该降低更新频率甚至停止更新。 注:此处的更新,指的是类似发送心跳包的动作,或者定时更新内容。并非仅仅指更新应用版本。如果是用户动作,比如翻页刷新,不需要根据电量和充电状态处理。 判断当前充电状态 通过判断当前充电状态开始。BatteryManager会通过一个intent广播所有电池和充电详情,包含充电状态。 因为这是一个sticky intent,你不需要注册广播接收器。简单地通过调用 registerReceiver,像下面的代码段传入一个null的接收器,当前电池状态的intent就会返回。你也可以传入一个真实的接收器对象,但我们暂时不会操作更新,所以这是没必要的。 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 </td> <td class="code"> ``` IntentFilter ifilter <span style="color: #339933;">=</span> <span style="font-weight: bold;">new</span> IntentFilter<span style="color: #009900;">(</span>Intent.<span style="color: #006633;">ACTION_BATTERY_CHANGED</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> Intent batteryStatus <span style="color: #339933;">=</span> context.<span style="color: #006633;">registerReceiver</span><span style="color: #009900;">(</span><span style="font-weight: bold; color: #000066;">null</span>, ifilter<span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="font-style: italic; color: #666666;">//你可以读到充电状态,如果在充电,可以读到是usb还是交流电</span> <span style="font-style: italic; color: #666666;">// 是否在充电</span> <span style="font-weight: bold; color: #000066;">int</span> status <span style="color: #339933;">=</span> batteryStatus.<span style="color: #006633;">getIntExtra</span><span style="color: #009900;">(</span>BatteryManager.<span style="color: #006633;">EXTRA_STATUS</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="font-weight: bold; color: #000066;">boolean</span> isCharging <span style="color: #339933;">=</span> status <span style="color: #339933;">==</span> BatteryManager.<span style="color: #006633;">BATTERY_STATUS_CHARGING</span> <span style="color: #339933;">||</span> status <span style="color: #339933;">==</span> BatteryManager.<span style="color: #006633;">BATTERY_STATUS_FULL</span><span style="color: #339933;">;</span> <span style="font-style: italic; color: #666666;">// 怎么充</span> <span style="font-weight: bold; color: #000066;">int</span> chargePlug <span style="color: #339933;">=</span> batteryStatus.<span style="color: #006633;">getIntExtra</span><span style="color: #009900;">(</span>BatteryManager.<span style="color: #006633;">EXTRA_PLUGGED</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="font-weight: bold; color: #000066;">boolean</span> usbCharge <span style="color: #339933;">=</span> chargePlug <span style="color: #339933;">==</span> BatteryManager.<span style="color: #006633;">BATTERY_PLUGGED_USB</span><span style="color: #339933;">;</span> <span style="font-weight: bold; color: #000066;">boolean</span> acCharge <span style="color: #339933;">=</span> chargePlug <span style="color: #339933;">==</span> BatteryManager.<span style="color: #006633;">BATTERY_PLUGGED_AC</span><span style="color: #339933;">;</span> </td> </tr> 通常你应该在使用交流电充电时最大化后台更新频率,在使用usb充电时降低,不充电时更低。 ...

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

微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能

在做一个微信的微网站中的一个便民服务电话功能的应用,用到移动web页面中列出的电话号码,点击需要实现调用通讯录,网页一键拨号的拨打电话功能。 如果需要在移动浏览器中实现拨打电话,发送email,美国服务器,调用sns等功能,移动手机WEB页面(HTML5)Javascript提供的接口是一个好办法。 采用url链接的方式,实现在Safari ios,香港服务器,Android 浏览器,webos 浏览器,塞班浏览器,IE,Operamini等主流浏览器,进行拨打电话功能。 1.最常用WEB页面JS实现一键拨号的电话拨打功能: 移动WEB页面JS一键拨打号码咨询功能 在拨号界面,显示号码,并提示拨打。 支持大部分的浏览器,但是在QQ浏览器上支持不好。 微信现在出现屏蔽常规拨号功能,具体解决办法见《微信开发实现一键拨号出现屏蔽问题的解决方案》 2.最常用WEB页面JS实现一键发送短信功能: 移动WEB页面JS一键发送短信咨询功能 在信息录入界面,显示发送号码,并提示录入信息。 支持大部分的浏览器,但是在QQ浏览器上支持不好。 3、移动web页面自动探测电话号码 如果要支持safari for ios ,blackberry browser的号码,需要加上一下标签: 4.使用wtai协议进行拨打电话。 在wml中可以调用设备的wtai函数来呼叫特定的电话号码。目前,越来越多的浏览器都支持这个功能,但还不是所有。 代码如下所示: 实例: 拨打10086 将10086存储至电话簿 建议采用这个方式。 5、不太灵验的方式: 移动WEB页面JS一键拨打号码咨询功能 经过测试,大部分浏览器都不支持了。 补充—————————– 这段时间很多人看了我的帖子《微信开发之移动手机WEB页面(HTML5)Javascript实现一键拨号及短信发送功能 》询问我在微信中出现无法拨号的情况,原先我操作的时候,的确是OK的,现在微信版本升级了,我试了一下,果然拨号不行了,在首页的web页面中是没有问题的,但是在微信中就是拨打不了,找了很多,后来发现是微信做了屏蔽,解决方法如下: 1、拨号的代码还是不变,和我原先的文章一样, 2、打开拨号页面要做下处理,在网址后面增加一个锚节点mp.weixin.qq.com。 实例如下: 如:http://www.xxxxxx/xxxx.html 上需要拨号代码,操作如下 1、 继续写拨号代码 移动WEB页面JS一键拨打号码咨询功能 2、打开这个网址链接的时候,就用这个链接http://www.xxxxxx/xxxx.html #mp.weixin.qq.com(多添加一个mp.weixin.qq.com) 这样,微信里面的一键拨号功能就OK了

2014年8月6日 · 1 分钟 · 天边的星星

常用公共DNS服务器地址

DNS,全称Domain Name System,即域名解析系统,帮助用户在互联网上寻找路径,它在互联网的作用是把域名转换成为网络可以识别的IP地址。目前国内电信运营商通过使用DNS劫持和DNS污染的方法,干扰用户正常上网,使得用户无法访问众多国外常用服务,因此今天我介绍一些国内外的DNS服务器地址,供大家选择使用。 国外DNS服务器地址 Google Public DNS (8.8.8.8, 8.8.4.4) OpenDNS (208.67.222.222, 208.67.220.220) OpenDNS Family (208.67.222.123, 208.67.220.123) V2EX DNS (199.91.73.222;178.79.131.110) Comodo Secure (8.26.56.26, 8.20.247.20) UltraDNS (156.154.70.1, 156.154.71.1) Norton ConnectSafe (199.85.126.10, 199.85.127.10) 国内DNS服务器地址 OneDNS (112.124.47.27) OpenerDNS(42.120.21.30) aliDNS (223.5.5.5, 223.6.6.6) 114DNS (114.114.114.114, 114.114.115.115) 114DNS安全版 (114.114.114.119, 114.114.115.119) 114DNS家庭版 (114.114.114.110, 114.114.115.110) <div> http://www.freevpnmac.com/macvpn/ ![](file:///C:\Users\ADMINI~1\AppData\Local\Temp\%W@GJ$ACOF(TYDYECOKVDYB.png)https://code.google.com/p/smarthosts/ ![](file:///C:\Users\ADMINI~1\AppData\Local\Temp\%W@GJ$ACOF(TYDYECOKVDYB.png)http://www.vpngate.net/cn/</div> <div> http://technet.microsoft.com/en-us/library/ms525732(VS.90).aspx </div>

2014年8月5日 · 1 分钟 · 天边的星星

Android DrawerLayout+ fragment 布局实现左右侧滑

技术要点: android.support.v4.widget.DrawerLayout 打开抽屉: DrawerLayout .openDrawer(); 关闭抽屉:DrawerLayout.closeDrawer( ); **为slidingLayout设置一个layout_grative属性 ** ** ** **中间![](http://www.2cto.com/uploadfile/Collfiles/20140226/20140226092627200.jpg) 左侧![](http://www.2cto.com/uploadfile/Collfiles/20140226/20140226092627201.jpg) 右侧 ![](http://www.2cto.com/uploadfile/Collfiles/20140226/20140226092627202.jpg) ** 点击first ![](http://www.2cto.com/uploadfile/Collfiles/20140226/20140226092627203.jpg) 点击second ![](http://www.2cto.com/uploadfile/Collfiles/20140226/20140226092628204.jpg) ** ** ** ** 代码: activity_main.xml <喎�”http://www.2cto.com/kf/ware/vc/” target=”_blank” class=”keylink”>vc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz48L3N0cm9uZz48L3A+CjxwcmUgY2xhc3M9″brush:java;”><frameLayout android:id=”@+id/fragment_layout” android:layout_width=”fill_parent” android:layout_height=”fill_parent” > first.xml [?](http://www.2cto.com/kf/201402/281540.html#) <table style="font-weight: normal !important;" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter" style="color: #afafaf !important;"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `&lt;linearlayout xmlns:android=``"&lt;a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android&lt;/a>"` `android:id=``"@+id/drawer_layout"` `android:layout_width=``"match_parent"` `android:layout_height=``"match_parent"` `android:orientation=``"vertical"``&gt;` </div> <div class="line number2 index1 alt1"> </div> <div class="line number3 index2 alt2"> ` ``&lt;textview android:id=``"@+id/textView1"` `android:layout_width=``"wrap_content"` `android:layout_height=``"wrap_content"` `android:text=``"first"` `android:textappearance=``"?android:attr/textAppearanceLarge"``&gt;` </div> <div class="line number4 index3 alt1"> ` ` </div> <div class="line number5 index4 alt2"> `&lt;/textview&gt;&lt;/linearlayout&gt;` </div> </div> </td> </tr> </table> ** second.xml** ...

2014年8月5日 · 13 分钟 · 天边的星星