android的PreferenceActivity

前言 这段时间在研究android平台上的开源项目——StandupTimer,这是由jwood所设计的一个较为简单android应用,用于控制会议时间,类似秒表倒计时。 PreferenceActivity PreferenceActivity是android提供的对系统信息和配置进行自动保存的Activity,它通过[SharedPreference](http://developer.android.com/reference/android/content/SharedPreferences.html)方式将信息保存在XML 文件当中。使用PreferenceActivity不需要我们对SharedPreference进行操作,系统会自动对Activity 的各种View上的改变进行保存(这个真是太赞了!)。 在android项目中添加一个 android xml 文件需要注意的是这次选择的是 Preference。而不是以往的Layout ![](http://pic002.cnblogs.com/img/xinsuhui/201009/2010090109571786.gif) 这个文件是保存在 res /xml 路径下的。 PreferenceScreen xml preference下的View是有限的,只有下面几个: - CheckBoxPreference:CheckBox选择项,对应的值的ture或flase - EditTextPreference:输入编辑框,值为String类型,会弹出对话框供输入。 - ListPreference: 列表选择,弹出对话框供选择。 - Preference:只进行文本显示,需要与其他进行组合使用。 - PreferenceCategory:用于分组。 - RingtonePreference:系统玲声选择 更多关于 PreferenceScreen的介绍可以查看博客园上的一篇文章:[Android之PreferenceActivity](http://www.cnblogs.com/wservices/archive/2010/07/08/1773449.html) ![复制代码](http://common.cnblogs.com/images/copycode.gif) <div> <span style="color: #0000ff;"><?</span><span style="color: #ff00ff;">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color: #0000ff;">?></span> «/span>PreferenceScreen xmlns:android=”http://schemas.android.com/apk/res/android”> «/span>CheckBoxPreference android:key=”sounds” android:title=”@string/play_sounds” android:summary=”@string/play_sounds_summary” android:defaultValue=”true”></CheckBoxPreference> «/span>EditTextPreference android:key=”warning_time” android:title=”@string/warning_time” android:summary=”@string/warning_time_summary” android:defaultValue=”15″ android:inputType=”phone” android:digits=”0123456789″></EditTextPreference> «/span>CheckBoxPreference android:key=”unlimited_participants” android:title=”@string/unlimited_participants” android:summary=”@string/unlimited_participants_summary” android:defaultValue=”false”></CheckBoxPreference> «/span>CheckBoxPreference android:key=”variable_meeting_length” android:title=”@string/variable_meeting_length” android:summary=”@string/variable_meeting_length_summary” android:defaultValue=”false”></CheckBoxPreference> </PreferenceScreen> ...

2014年5月16日 · 2 分钟 · 天边的星星

开源2D HTML5渲染引擎CutJS

CutJS是一款专门用于跨平台游戏开发的开源2D HTML5渲染引擎,轻量级、快速、可交互,CutJS的优势可谓颇多。CutJS基于MIT许可协议发布,由Piqnt软件工作室推出,支持现代浏览器和移动设备,可用于Web、iOS、Android、Win8、Facebook、Chrome Web Store等平台游戏应用开发。 作为HTML5中新晋的标签元素,Canvas提供了基于JavaScript的2D和Bitmap图形API,但却没有像DOM之类的数据模型来帮助开发者编写应用,开发者必须手动绘制应用并对渲染循环进行管理以实现播放Canvas图形。此外,鼠标事件也只适用于整个Canvas层,并且还需手动处理。 而CutJS可以非常良好地解决这些问题。CutJS为开发者提供了一个类似于DOM树的数据模型来编写应用程序,并在内部管理渲染周期和应用绘制,还能处理并向目标树节点分发鼠标事件。 (文/唐小引 责编/刘璐璐) 传送门:CutJS官网、GitHub托管地址、mobilehub主页

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

开发者必备的十二大Android开发资源

无论你是经验丰富的专业Android开发者,还是初出茅庐的新人,开发应用最忌讳的就是闭门造车。不能把自己圈在自己的思维里,要学会借助外在现有的资源去协助开发,这样既不会让自己固步自封,还能够大大提高工作效率。在这里,本文介绍的这些资源包括工具、库和网站等,学会利用它们,将会对你的工作有着非常大的帮助。 1. OkHttp OkHttp是Square的一款产品,是一个Java的开源HTTP和SPDY客户端开发包,支持Android。Android自带的两个HTTP框架(HttpURLConnection和HttpClient),在各种Android OS版本一直充斥着错误,可以使任何理智的开发者走向崩溃。不过幸运地是,OkHttp解决了这些问题。OkHttp是建立在HttpUrlConnection上,从Android代码库保持最新的修复,这意味着再也没有与旧操作系统版本出现兼容性问题的噩梦。 相关链接:OkHttp的mobilehub主页 2. Retrofit Retrofit同样是Square的一款开源产品,用于Android平台的一个类型安全的REST客户端。就API而言,Android平台并不适合过多简单的客户端服务器交互,而Retrofit旨在提高对REST请求。Retrofit支持相当多的自定义,使用GSON为JSON解析,并且通过简化这一切成为简单的接口来为为构建形式和多部分请求节省大量的时间。 相关链接:Retrofit的mobilehub主页 3. Picasso 这个仍然是Square的开源项目,Picasso是一个用于Android平台上的下载和缓存图片的项目。它有许多定制选项,如何处理下载图片(包括调整和裁剪,以及提供一个接口让你随自己心意将图片转换成圆角等)。Picasso将要下载的图片(如果没有缓存)并将它负载到指定的目标,转换图片以适合所显示的ImageView,来减少内存消耗。 相关链接:Picasso的mobilehub主页 4. AndroidViews AndroidViews.net是一个网站,汇集了众多不同类型的工具、库和可浏览索引的资源。你不用重新开发已有的东西,可以节省很多时间。不过它还存在一个缺点就是,网站还不全面。 相关链接:AndroidViews的mobilehub主页 5. Android Weekly Android Weekly相当于是Android开发社区的实时通讯录,每周报导Android最新讯息,包括新的库、工具和博客等,只要你有Email,就可以对其进行订阅,了解更多关于安卓的消息。 相关链接:Android Weekly的mobilehub主页 6. Android Niceties Android Niceties集合了Android生态系统中一些精心设计、优雅精美的Android程序,是启发灵感的好资源。Android Niceties覆盖面极好,来自主要的平台应用比如Duolingo、Expedia、Etsy和之前依序还不为人知的Muzei、Timely和Pocket。 相关链接:Android Niceties的mobilehub主页 7. Android Lifecycle 展现了完整的Android片段和Activity的生命周期,Activity从新建到销毁,构成了一个生命周期,但要知道生命周期并不仅仅只包括这两个。而Android Lifecycle打印出的表图概述了Activity与Fragment在应用内部与外部和用户交互的流。 相关链接:Android Lifecycle的mobilehub主页 8. Android Asset Studio 这个网站已提供了大量的工具来简化创建各种Android相关的资源,包括启动栏图标、通知图标和导航抽屉图标等,让你不再为设计应用图标而发愁。 相关链接:Android Asset Studio的mobilehub主页 9. Android Holo Colors Generator 制作更加精美的图标,可以前往Android Asset Studio进行设计。该网站提供应用所需要的所有图标的生成工具,包括菜单图标、动作栏图标、标签栏图标、通知图标等,而且操作简单易行。 相关链接:Android Holo Colors Generator的mobilehub主页 10. DPI Calculator for Android 就像它的名字一样,这是一款专门用于Android平台的分辨率计算器,使用很简单,用户通过输入长、宽、对角线等,就可以计算出屏幕的实际分辨率来。 11. Android Developers YouTube Channel ...

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

安卓图片OCR识别技术 tesseract研究文档

针对安卓APP的 OCR图片识别技术研究与 DEMO: 鉴于大家都给我发私信要源码:现在更新源码 在下载(由于最近CSDN下载分不够了。。所以要了10分 还希望大家理解哦) http://download.csdn.net/detail/wei2253498/7146411 通过近端时间的在网络上的学习,了解了俩个OCR的技术,包括tesseract 和 openCv这俩个技术 主要研究了tesseract的OCR技术,并通过模拟器做了个demo app下面与大家分享过程,希望共同进步。 Tesseract OCR引擎是1995年UNLVAccuracy大赛中的排名前三的引擎。1995年到2006年间,它没有大的改进;之后,它被谷歌大幅改进,很可能是识别率最高的可用开源OCR引擎之一了。结合Leptonica图像处理库,它能读取各种各样格式的图像文件,识别出超过40多种语言的文本。 Tesseract的下载地址为: http://code.google.com/p/tesseract-ocr/downloads/list Tesseract for android 的 tess-two下载地址为: https://github.com/rmtheis/tess-two/archive/master.zip 接下来需要对下载下来的tess-two进行编译 如何用android ndk进行so的编译我放在了另外的一个文档中,大家请参考 也可以直接下载编译好的tess-two so文件 http://download.csdn.net/detail/uniquerhythm/5166651 编译好后,将src下的两个包以及libs导入到自己的项目就可以用啦 接下来我们还需要 tessract的android jar包 Android官方地址:tesseract-android-tools http://code.google.com/p/tesseract-android-tools/downloads/list?can=1&q= 但它必须要一个匹配库,即tessdata,我们可以从官方拷贝,在前面git的项目里面tesseract源码目录有现成的tessdata可以用,对于中文,googlecode上也有下载,当然也可以自己训练不同语言的tessdata。 包leptonica的类我们不必使用,只要使用tess包的类就行了 下面是 tessBaseAPI的主要用法 TessBaseAPI **[java]** [view plain](http://blog.csdn.net/wei2253498/article/details/8748741#)[copy](http://blog.csdn.net/wei2253498/article/details/8748741#)[print](http://blog.csdn.net/wei2253498/article/details/8748741#)[?](http://blog.csdn.net/wei2253498/article/details/8748741#)[![在CODE上查看代码片](https://code.csdn.net/assets/CODE_ico.png)](https://code.csdn.net/snippets/274921)[![派生到我的代码片](https://code.csdn.net/assets/ico_fork.svg)](https://code.csdn.net/snippets/274921/fork) <div> </div> </div> - <span style="color: black;"><span class="comment" style="color: #008200;">//////////////////////华丽的分割线//////////////////////////////////////////////////////</span> </span> - <span style="color: black;"> </span> - <span style="color: black;">TessBaseAPI baseApi=<span class="keyword" style="font-weight: bold; color: #006699;">new</span> TessBaseAPI(); </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//初始化tess</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//android下面,tessdata肯定得放到sd卡里了</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//如果tessdata这个目录放在sd卡的根目录</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//那么path直接传入sd卡的目录</span> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//eng就是英文,关于语言,按ISO 639-3标准的代码就行,具体请移步wiki</span> </span> - <span style="color: black;">baseApi.init(<span class="string" style="color: blue;">&#8220;tessdata文件夹的父级目录&#8221;</span>,<span class="string" style="color: blue;">&#8220;eng&#8221;</span>); </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//options是为了缩放图片,这个酌情缩放,图片小的话可以不缩放</span> </span> - <span style="color: black;">BitmapFactory.Options options=newBitmapFactory.Options(); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//缩小为原来的1/2</span> </span> - <span style="color: black;">options.inSampleSize=<span class="number" style="color: #c00000;">2</span>; </span> - <span style="color: black;"> </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//bitmap,我这里是以流的形式,只要能形成Bitmap就行</span> </span> - <span style="color: black;">Bitmap bitmap = BitmapFactory.decodeStream(instream,<span class="keyword" style="font-weight: bold; color: #006699;">null</span>,options); </span> - <span style="color: black;"> instream.close(); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//设置要ocr的图片bitmap</span> </span> - <span style="color: black;">baseApi.setImage(bitmap); </span> - <span style="color: black;"><span class="comment" style="color: #008200;">//根据Init的语言,获得ocr后的字符串</span> </span> - <span style="color: black;">String text= baseApi.getUTF8Text(); </span> ...

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

实现android图像识别的几种方法

点击这里下载第一种代码 最近完成了毕业设计,论文名为基于图像识别的移动人口管理系统。编写过程中学到了几种图像识别的技术,先写下来与大家分享。 第一种,直接使用免费得图像识别web服务器 地址为http://maggie.ocrgrid.org/ 实现代码:1.为了提高图像的识别率,首先要灰度化 **[java]** [view plain](http://blog.csdn.net/dannor2010/article/details/7073528#)[copy](http://blog.csdn.net/dannor2010/article/details/7073528#) <div> </div> <div> </div> </div> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">private</span> Bitmap convertToGrayscale(Bitmap bitmap) { </span> - <span style="color: black;"> ColorMatrix colorMatrix = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ColorMatrix(); </span> - <span style="color: black;"> colorMatrix.setSaturation(<span class="number" style="color: #c00000;"></span>); </span> - <span style="color: black;"> Paint paint = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Paint(); </span> - <span style="color: black;"> ColorMatrixColorFilter cmcf = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ColorMatrixColorFilter(colorMatrix); </span> - <span style="color: black;"> paint.setColorFilter(cmcf); </span> - <span style="color: black;"> </span> - <span style="color: black;"> Bitmap result = Bitmap.createBitmap(bitmap.getWidth(), bitmap </span> - <span style="color: black;"> .getHeight(), Bitmap.Config.RGB_565); </span> - <span style="color: black;"> </span> - <span style="color: black;"> Canvas drawingCanvas = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Canvas(result); </span> - <span style="color: black;"> Rect src = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Rect(<span class="number" style="color: #c00000;"></span>, <span class="number" style="color: #c00000;"></span>, bitmap.getWidth(), bitmap.getHeight()); </span> - <span style="color: black;"> Rect dst = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Rect(src); </span> - <span style="color: black;"> drawingCanvas.drawBitmap(bitmap, src, dst, paint); </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> result; </span> - <span style="color: black;"> } </span> 2.将灰度化的图像上传到http://maggie.ocrgrid.org/ 方法和类就不说了,有需要的话可以发我邮箱 ...

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

直接拿来用!Facebook移动开源项目大合集

随着iOS依赖管理工具CocoaPods和大量第三方开源库成熟起来,业界积累了大量的优秀开源项目。不久之前,Facebook推出了旗下移动新闻阅读应用Paper,便动用了将近100个第三方开源库,极大地简化了自己的应用开发任务。 移动开发生态圈日益完善,基础的开源组件也越来越丰富,而Facebook不仅取之开源,更不断地开源其内部项目,将成果反馈给开源社区,与开发者共享。接下来,就让我们一起来看看那些年Facebook在移动开发方面所推出的众多开源项目。 1. KVOController KVOController是Facebook开源的一款简单安全的KVO(Key-Value Observing,键值观察,Objective-C中定义的一个通知机制)工具,用于iOS和Mac OS X应用开发中。KVOController基于Cocoa经过时间考验的KVO实现开发而成,它提供了一个简洁方便、线程安全的API。 主要特性: 使用Blocks、自定义Actions或NSKeyValueObserving回调进行通知; 观测者移除时无异常; 控制器dealloc时移除隐式观测者; 提升使用NSKeyValueObservingInitial的性能; 为恢复观测者提供特殊防护的线程安全。 相关链接:KVOController的GitHub托管地址、mobilehub主页 2. Shimmer Shimmer是一款开源的加载效果工具,能够非常简单地向应用中的任何视图添加闪闪发光的字体效果,并且不会显得突兀。Shimmer最初是Facebook于今年1月所推出的Paper的开发过程中所使用到的工具,后被Facebook基于BSD许可协议开源,支持iOS 6及其以上系统。 相关链接:Shimmer的GitHub托管地址、mobilehub主页 3. Rebound Rebound是Facebook推出的一款Android的物理和动画库,于2013年10月在Mobile@Scale大会上正式发布,旨在解决笨重、缓慢的传统移动网络界面。Rebound基于BSD许可协议,兼容HTML5和Node.js。 Rebound不是一款通用物理库,但其弹簧模型在应用程序中引入了现实世界的物理,易于集成,创建的动画能够让人感觉到非常自然,可用于滚动条、切换开关、呼叫等场景下。 相关链接:Rebound官网、GitHub托管地址、mobilehub主页 4. Buck Buck是Facebook开发的一款开源Android Build工具,基于Apache License 2.0协议发布,可以通过独立构建并行来发挥多核的性能,加速开发者的Android应用构建流程。Buck基于单一的库构建,能够以最小的资源集重建,非常适用于Android项目组织与管理。 主要特性: 加速Android构建。充分发挥多核处理器的优势,并行构建独立模块。通过追踪没有变化的源文件,减少增量构建实践,最少化需要重建的资源。 对于不支持开箱即用的Android Ant编译脚本,引进ad-doc构建系统。 在构建系统里保持生成构建的逻辑,无需另外的系统生成构建文件。 基于构建规则生成一个Intellij项目,能同时匹配本地IDE以及无头文件编译开发。 支持单元测试,选用最均衡的方式获得代码覆盖率。 相关链接:Buck官网、Github托管地址、mobilehub主页 5. xctool xctool是Facebook推出的另一款开源的应用构建工具,基于Apache License 2.0协议发布,用于取代苹果的xcodebuild,来简化iOS和Mac项目的构建和测试。xctool对于持续集成可谓大有裨益,其最大的好处就是可以直接从命令行构建和运行单元测试。 xctool在xcodebuild的基础上还添加了一些额外的功能,比如支持将构建和测试结果结构化输出;界面友好,支持ANSI彩色输出;速度更快,支持进行并行测试,使得运行速度提升2~3倍等。xctool支持Xcode 5+,并且,在使用xctool时必须安装Xcode命令行工具。 主要特性: 作为Xcode.app运行相同的测试; 构建输出和测试结果均为JSON格式,无需解析输出; xctool只有在发现错误的时候才打印消息,而xcodebuild对每个源文件都会打印。 相关链接:xctool的GitHub托管地址、mobilehub主页**** 6. Conceal Conceal是一套用于Android平台上进行文件加密和鉴权的Java API,专为速度设计,小巧而高速。它使用了OpenSSL算法的子集和一些预先定义的选项,能够让库保持在较小的体积。通过它,开发者可以实现对手机、平板电脑SD卡中的数据以及大型文件进行加密和存储。 相关链接:Conceal官网、GitHub托管地址、mobilehub主页 7. Origami 在界面和交互设计上颇让人惊喜的Paper让Facebook的大量开源工具从幕后走向了台前,Origami即为其中之一。这个被盛赞为“交互神器”的设计师新宠,是Facebook设计团队花费了9个月时间开发的一款基于Quartz Composer的插件,能够让设计师无需编程,快速构建移动应用交互原型。 Origami为设计师提供了开关、滚动、弹性动画等一系列自定义控件,并对Quartz Composer进行了改善,比如支持Retina显示器、重新设计工具栏图标等,以帮助设计师更为轻便地实现应用原型交互。 相关链接:Origami官网、GitHub托管地址、mobilehub主页 8. Bolts(iOS / Android) Bolts是一个面向iOS和Android的底层库集合,分别为Bolts-iOS和Bolts-Android,由Facebook和Parse共同设计完成,于2014年1月基于BSD许可协议开源,其所有源码均托管到GitHub上。Bolts能够让移动应用开发变得更加简单,其组件与Parse及Facebook服务完全无关,因此,开发者无需拥有Parse或Facebook开发者账户即可直接使用。 相关链接:Bolts的Github托管地址、mobilehub主页 9. Facebook SDK(iOS / Android) ...

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

Android 平台推送方案

前段时间做的项目需要添加一个推送的功能,现在应用里边加入推送也很普遍,所以查了查相关的资料,总结了以下几种方案! 【1】使用XMPP协议(Openfire + Spark + Smack) 简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。 优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。 缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。 这种方法需要服务端配合,需要整合openfire服务器,我们的服务端用的php,而这个需要用Java,客户端的代码也需要花一段时间去研究,由于时间有限并没有使用这种方法。不过在后来的开发中,想在程序里加入类似于微信的语音聊天的功能,所以对于这种方式又进行了一段开发,以后我会写一篇文章介绍一下。 【2】使用MQTT协议 简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。 优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考:http://mqtt.org/),且已有C++版的服务端组件rsmb。 【3】使用第三方推送服务 ** 1**.Google 云推送服务 鉴于国内的特殊情况,大部分国产手机都砍掉了Google服务,所以这种实现方式不太现实 **2. **百度云推送服务(http://open.baidu.com/) 这个推送方案实施起来比较简单,直接集成相关的sdk,就可以实现推送,而且服务端的sdk有PHP,Java,Python版本,也可以直接通过url推送相关消息 **3. **极光推送(https://www.jpush.cn/) 这个文档比较全,号称3分钟快速Demo,集成起来相对就简单多了 今天主要介绍一下第二种推送方案,之前查资料的时候没有找到百度云推送和极光推送,也是后来一个偶然的机会发现百度推出了云推送服务,今天总结一下,也希望以后各位朋友在开发中少走弯路, 1.首先下载rsmb包,并解压,找到对应服务器的文件夹,我的是linux_ia32,这个支持多种服务器 (下载地址:http://www.alphaworks.ibm.com/tech/rsmb,或者 http://pan.baidu.com/share/link?shareid=305439419&uk=137542493) 2.把目录及里面的文件上传到服务器上,(我的是linux服务器)进入到用命令行进入到该目录 然后自行 ./broker 如此这般便启动了推送服务, 3.准备推送页面(通过网页进行推送测试)下载PHP端的推送代码 (http://pan.baidu.com/share/link?shareid=311569022&uk=137542493),解压进入 etc目录更改 config.php里的IP地址为你的服务器IP地址 4.打开对应的url既可以看到如下的页面 Server status显示为 Online说明服务器正常启动了, 5.下面开始准备android客户端(下载地址https://github.com/tokudu/AndroidPushNotificationsDemo ) 启动推送服务,然后在上边的网页上把那一串字符输入到上边的输入框,下边输入要推送的内容 不幸的是报错了,错误如下 08-05 13:56:34.472: E/AndroidRuntime(30976): java.lang.VerifyError: com/tokudu/demo/PushService 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.tokudu.demo.PushActivity$1.onClick(PushActivity.java:32) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.view.View.performClick(View.java:4240) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.view.View$PerformClick.run(View.java:17721) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Handler.handleCallback(Handler.java:730) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Handler.dispatchMessage(Handler.java:92) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Looper.loop(Looper.java:137) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.app.ActivityThread.main(ActivityThread.java:5103) 08-05 13:56:34.472: E/AndroidRuntime(30976): at java.lang.reflect.Method.invokeNative(Native Method) 08-05 13:56:34.472: E/AndroidRuntime(30976): at java.lang.reflect.Method.invoke(Method.java:525) 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 08-05 13:56:34.472: E/AndroidRuntime(30976): at dalvik.system.NativeStart.main(Native Method) ...

2014年4月25日 · 1 分钟 · 天边的星星

Android Push Notification实现信息推送使用

在上一篇文章中提到在Android中实现推送方式的解决方案,其中一个比较成熟的解决方案便是使用XMPP协议实现。而AndroidPn项目就是使用XMPP协议实现信息推送的一个开源项目。在这里给大家介绍其使用过程。 ** Apndroid Push Notification的特点: ** 快速集成:提供一种比C2DM更加快捷的使用方式,避免各种限制. 无需架设服务器:通过使用”云服务”,减少额外服务器负担. 可以同时推送消息到网站页面,android 手机 耗电少,占用流量少. ** 具体配置过程: ** 首先, 我们需要下载androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip。 下载地址:http://sourceforge.net/projects/androidpn/ 解压两个包,Eclipse导入client,配置好目标平台,打开raw/androidpn.properties文件,配置客户端程序。 1. 如果是模拟器来运行客户端程序,把xmppHost配置成10.0.2.2[模拟器把10.0.2.2认为是所在主机的地址,127.0.0.1是模拟器本身的回环地址,10.0.2.1表示网关地址,10.0.2.3表示DNS地址,10.0.2.15表示目标设备的网络地址],关于模拟器的详细信息,大家可参阅相关资料,这里不再详述. xmppPort=5222 是服务器的xmpp服务监听端口 运行androidpn-server-0.5.0\bin\run.bat启动服务器,从浏览器访问http://127.0.0.1:7070/index.do (androidPN Server有个轻量级的web服务器,在7070端口监听请求,接受用户输入的文本消息) 运行客户端,客户端会向服务器发起连接请求,注册成功后,服务器能识别客户端,并维护和客户端的IP长连接。 ** 2. 如果是在同一个局域网内的其他机器的模拟器测试(或者使用同一无线路由器wifi上网的真机) ,则需要把这个值设置为服务器机器的局域网ip. ** ** 例如 你的电脑和android手机 都通过同一个无线路由器wifi上网, 电脑的ip地址为 192.168.1.2 而 手机的ip地址为 192.168.1.3, 这个时候 需要把这个值修改为 xmppHost=192.168.1.1 或是电脑的IP地址,就可以在手机上使用了. ** 如果是不在同一个局域网的真机测试,我们需要将这个值设置为服务器的IP地址。 ** 具体配置如下图所示:** ** 我的电脑IP是:192.168.8.107 ** 服务器运行主界面: 推送信息如下界面所示: 测试结果如下图所示: 最后在我的模拟器和真机中测试通过。^_^ 最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/03/16/2399655.html 谢谢。

2014年4月17日 · 1 分钟 · 天边的星星

XMPP协议实现原理介绍

**XMPP协议简介 ** XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。 在这四种协议中,XMPP是最灵活的。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。 1. 什么是XMPP ? XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分; 核心的XML流传输协议 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。 2. XMPP的基本网络结构是怎样的? XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。 3. XMPP通过TCP传什么了? 传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。 XMPP协议工作原理: 4. XMPP协议地址格式: **5. XMPP消息格式: ** 6. 核心的XML流传输协议 基于XML FreeEIM流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。 XMPP的扩展协议Jingle使得其支持语音和视频。 XMPP的官方文档时RFC 3920. 7. XMPP应用示例 举个例子看看所谓的XML流是什么样子的? 客户端:<?xml version=&#8217;1.0&#8242;?> <stream:stream to=&#8217;example_com&#8217; xmlns=&#8217;jabber:client&#8217; xmlns:stream=&#8217;http_etherx_jabber_org/streams&#8217; version=&#8217;1.0&#8242;> 服务器:<?xml version=&#8217;1.0&#8242;?> <stream:stream from=&#8217;example_com&#8217; id=&#8217;someid&#8217; xmlns=&#8217;jabber:client&#8217; xmlns:stream=&#8217;http_etherx_jabber_org/streams&#8217; version=&#8217;1.0&#8242;> &#8230;其他通信&#8230; 客户端:<message from=&#8217;juliet_example_com&#8217; to=&#8217;romeo_example_net&#8217; xml:lang=&#8217;en&#8217;> 客户端: <body>Art thou not Romeo, and a Montague?</body> 客户端:</message> 服务器:<message from=&#8217;romeo_example_net&#8217; to=&#8217;juliet_example_com&#8217; xml:lang=&#8217;en&#8217;> 服务器:<body>Neither, fair saint, if either thee dislike.</body> 服务器:</message> 客户端:</stream:stream> 服务器:</stream:stream> ...

2014年4月17日 · 1 分钟 · 天边的星星

Maven Android使用一

Maven的坐标包括:groupId、artifactId、version、packaging、classifier。 groupId:定义当前maven项目隶属的实际项目; artifactId:定义实际项目中的一个maven项目(模块); version:定义当前所处的模板; packaging:定义maven项目的打包方式; 依赖对应的元素Dependencies是dependency的负数形式,非常形象,它可以包含一个或者多个dependency。依赖也有它的一组子元素: groupId、artifactId、version:依赖的基本坐标; type:依赖的类型 scope:依赖的范围,用来控制依赖于编译classpath、测试classpath、运行classpath的关系,有compile、test、provided、runtime、import。 依赖是可传递的,如A->B,B->C,那么A->C。传递性依赖简化了依赖管理,但在带来好处的同时也给项目带来了很多隐性的依赖,也就是我们平时总会遇到的依赖冲突,经常需要排除依赖(exclusions)。 排查依赖最常用到的就是mvn dependency:tree命令,将当前项目的依赖树打出来查看。搜索发生冲突的依赖,排除其中多个依赖只留下唯一一个。 类似java的继承思想,抽取重复的配置,消除重复。Parent元素声明父模块,parent下的子元素groupId、artifactId、version定位父模块坐标。 Maven创建的Lib项目 <?xml version=*“1.0”* encoding=*“UTF-8”*?> xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&#8221;> 4.0.0 com.meibu MeibuLoginActivity 0.0.1-SNAPSHOT apklib//添加下面的build //plugins 就可以设置打包方式apk和apklib MeibuLoginActivity UTF-8</project.build.sourceEncoding> 2.2.1</platform.version> <android.plugin.version>3.6.0</android.plugin.version> com.google.android android ${platform.version}//代表上面properties中的 可以写成2.2.1等等 provided //依赖apklib关系 其中的version是你lib中的设置的版本例如0.0.1-SNAPSHOT com.meibu MeibuBaseActivity 0.0.1-SNAPSHOT apklib com.jayway.maven.plugins.android.generation2 android-maven-plugin ${android.plugin.version}//表示打包插件的版本号就是上面properties 中的<android.plugin.version>可以直接写里面的数字 true 8 创建Maven项目打包apk 依赖2个lib包,下面这个是配置文件,部分说明参考上面pom文件 <?xml version=*“1.0”* encoding=*“UTF-8”*?> xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&#8221;> 4.0.0 com.meibu MeibuTest 0.0.1-SNAPSHOT apk UTF-8</project.build.sourceEncoding> 2.2.1</platform.version> <android.plugin.version>3.6.0</android.plugin.version> com.google.android android ${platform.version} provided com.meibu MeibuBaseActivity 0.0.1-SNAPSHOT apklib com.meibu MeibuLoginActivity ...

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