写NDK应用,实际上是写JNI,就是java和本地应用的接口。先看看实现后的效果:
首先需要安装ndk,官方网址:
下载然后解压缩到某个路径下即可。本文环境是mac osx。
设置路径,在以下文件:
vim ~/.bash_profile
设置:
export PATH=${PATH}:/Developer/android-sdk-mac_86/tools:/Developer/android-ndk-r4b
因为mac自带了gcc等开发环境。所以安装十分简单。
下面就是编写ndk项目了。首先编写一个普通的android项目。在activity中,有点儿特殊:
马上又要做c/c++开发了。在mac上搭建一下ide环境。还是用eclipse+cdt吧。
安装cdt。目前使用的eclipse是3.6(helios),在上面直接安装cdt 7.0。可以参见cdt链接(http://www.eclipse.org/cdt/)。
安装介绍:http://www.eclipse.org/cdt/downloads.php,安装链接:http://download.eclipse.org/tools/cdt/releases/helios
在解决mac中为图形界面程序设置环境变量问题中提到在maven中的配置,看了一下,android sdk tools路径的配置没记过。这里补充一下。
编辑或者创建文件:
vim ~/.bash_profile
在里面把tools路径加上:
export PATH=${PATH}:/Developer/android-sdk-mac_86/tools
然后,执行命令,让配置生效:
source ~/.bash_profile
测试一下:
adb devices
在编写简单自定义VideoView中尝试编写自己的VideoView实现类。这样对VideoView的实现机制有了一个比较深入的理解。经过整理发现,其实要自定义需求,还真不一定需要重新自己的VideoView实现。在本文中将原来的CustomerVideoView的方法全部删除,并继承VideoView,发现功能上没有什么不能实现的。继承的CustomerVideoView最后其实只剩下继承来的构造方法,也就是说直接使用VideoView也没问题。
这次演进,实现了自定义的播放控制条:
这个播放控制条,实际是替代了编写简单自定义VideoView中的MediaController。这样就可以自定义各种样式和风格的控制条界面了。
在简单定制VideoView中做了简单的VideoView定制,其实就是在布局上做了一些事情。要向更灵活的定制播放器的行为,必须写自己的VideoView。参考android VideoView源代码,写了个最简单的实现。
看起来和简单定制VideoView中的效果差不多,但是还有很多逻辑没有加进来,比如:
- 视频大小有问题,被拉长了,需要在后续版本中改进;
- 还没有加入MediaController,没有前进、后退、暂停等按钮界面。
日志引用
在在播放视频前增加等待画面和进度提示中实现了简单的播放器,最近将逐渐演进,成为名副其实的定制版本播放器。本文做一个简单的定制,实际还没有动VedioView类,只是在布局上为播放器增加一些外围的信息提示。算是定制的热身运动。
效果:
通过相对布局,在加载的时候提示loading字样的文字,在加载到视频后,提示片名,当前时间,片子的时长和当前播放的时长。
日志引用
首先,安装git。我是通过HomeBrew安装git的。安装HomeBrew见安装和使用HomeBrew。
安装git的命令:
brew install git
然后,通过git下载android源代码:
git clone git://android.git.kernel.org/platform/frameworks/base.git
在ubuntu下使用惯了apt,在mac下,有MacPorts,但是有个问题,就是会强制安装很多重复的东西,MacPorts不会使用Mac机器上已经有的。
现在可以安装HomeBrew,它会检查本地是否有所需的工具,如果没有才下载编译安装。
安装过程很简单:
ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)"
HomeBrew是ruby脚本,但是mac下不需要安装ruby解释环境,系统自带了。
安装好后,可以:
brew –v
通过检查homebrew版本确认是否安装成功。
使用homebrew安装wget:
brew install wget
Android可以通过VideoView很方便的实现在线视频部分,可参见调用android api播放视频,不过该例子中的在线视频已经无法访问了。可使用这个源代码(实现了最简单的在线播放):
在线播放,可能需要等待片刻才能开始,或者有些客户需要在用户观看视频前看一下广告。比如:
然后:
日志引用
activemq提供了嵌入式的服务,即在一个JVM内部使用jms服务。我们用它来做异步发送消息。
JMS自身没有提供异步发送消息的机制,只能同步发送消息。这带来一个问题,比如外部(远端)的JMS服务器因为各种原因无法工作,那么发送消息的应用可能也连带的无法工作,这时消息会丢失。
可以使用activemq的嵌入式的服务,先同步发送消息到本地(嵌入式activemq服务),然后再用一个接收线程接收本地消息,发送到远端的JMS服务,这样即使远端JMS服务失效,消息也不会丢失,当远端服务器恢复后还能继续收到消息。