item.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
作者: 刘方青 2010- 05 - 01
一. CS- BS模式
CS即Client-Server模式, 客户端与服务器通过自定义协议或者http协议通讯,CS模式的优点是可以灵活实现各种功能和特效, 缺点是很多功能新增, 界面调整,逻辑变更一般都要更新客户端,比较麻烦。 像手机杀毒,来电通就是CS模式。
BS即Browser- Client模式,比如各类手机网站。 手机浏览器则是手机上BS模式的承载体,实现了与Browser相关的http协议和wml,html解析渲染。 BS模式的优点是可灵活实现界面调整,内容更新和逻辑变更,缺点是很多特效和功能无法实现。
综合考虑灵活性和实现效果, 很多客户端会考虑CS和BS结合的模式, 比如手机QQ和MSN上,IM部分是CS模式,新闻资讯则是BS模式。
二. Browser/Player的实现和整合
考虑到需求是一个简易的浏览器, 就不考虑S60 WEBKIT这样的庞然大物了。系统浏览器接口CBrCtlInterface又太简陋, htmlcontrol是唯一选择。 s60 htmlcontrol是一个开源的轻量级浏览器控件。非常佩服ytom大大和其他开源成员的工作, htmlcontrol的功能很强大,在s60 3rd/5th, winscw/gcce/armv5下对大部分wml和html页面都能做正确的解析。 具体使用方法可以到htmlcontrol提供的一些example。
用webclient实现http下载, 调用htmlcontrol对下载的网页数据做解析和渲染。 还实现了简单的界面跳转,和返回上一页的功能。对图片的解析暂时先不加了。
在void CWebClientAppUi::HandleHtmlCtlEventL(const THtmlCtlEvent& aEvent)函数调用aEvent.iElement->GetProperty(KHStrHref, href) 可获取到用户点击的链接地址, 如果是rtsp://前缀就触发player去播放, http://前缀就去解析网页。
三. 应用场景
原先视频播放器就是纯粹的CS模式, 用户要观看新的地址需要自己输入地址, 要获取服务器的更新内容基本不可能,除非在server端写一个socket服务器与客户端做数据交互。 现在有浏览器就方便了, 只需要更新server的网页内容, 客户端就能同步更新并随意观看。
对于手机视频监控和视频直播点播等应用来说, 浏览器+播放器是常见的实现模式。 以下是5530上实现网页解析和视频播放的效果。
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); tv.setText("屏幕分辨率为:"+dm.widthPixels+" * "+dm.heightPixels);
获取手机分辨率的代码:
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); tv.setText("屏幕分辨率为:"+dm.widthPixels+" * "+dm.heightPixels);
很简单,但是有些高分辨率的手机获取的不正常,比如使用Moto Milestone手机,这款手机是480x854分辨率的,但使用DisplayMetrics.widthPixels得的结果是320x533,并且如果按480x854切图也显示的太大,按320x533切图显示正常。原因是你没有在AndroidManifest.xml文件中设置参数android:minSdkVersion ,android在1.6之前是不支持WVGA个FWVGA的。
在AndroidManifest.xml加上下边的代码就ok了
XML code
<uses-sdk android:minSdkVersion="4" />