WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程BlackBerryBlackBerry 应用程序开发者指南 第二卷:高级--第5章 BlackBerry浏览器

BlackBerry 应用程序开发者指南 第二卷:高级--第5章 BlackBerry浏览器
作者:佚名  来源:本站整理  发布时间:2008-3-15 1:07:24

作者:Confach 发表于2006-04-28 22:20 pm
版权信息:可以任意转载, 转载时请务必以超链接形式标明文章原始出处 和作者信息.
http://www.cnblogs.com/confach/articles/387948.html

5 BlackBerry浏览器



浏览器API

在浏览器显示Web内容

在一个浏览器域里显示Web内容

支持附加的MIME类型

注册一个HTTP过滤器

浏览器API

API名和包

描述

浏览器应用程序API(net.rim.blackberry.api.browser)

通过调用Blackberry浏览器,API允许应用程序显示web内容,包括支持的图片格式,HTML以及WML页面.也允许应用程序提供HTTP请求的一个Referrer,HTTP,以及提交的内容.为获得更多信息,参看51页的在浏览器显示Web内容”.

浏览器域API

(net.rim.blackberry.api.browser.field)

API允许一个应用程序获取web内容在一个浏览器域里的显示,此域包含在应用程序UI.也允许应用程序配置浏览器域的表现形式,例如去除滚动条,或者指定仅显示屏幕一部分的浏览器域.

浏览器页面API(net.rim.blackberry.api.browser.plugin)

API允许应用程序支持附加的MIME类型.BlackBerry启动时,注册一个提交提供者,所有后发的浏览器对话将支持附加的MIME类型.为获取更多信息,参看66页的支持附加的MIME类型”.

HTTP过滤器API

(net.rim.device.api.io.http)

API允许应用程序向浏览器注册一个或多个URL的提供者.为获取更多信息,参看71页的注册一个HTTP过滤器”.

在浏览器里显示Web内容

为了在浏览器里显示web内容,使用浏览器应用程序API(net.rim.blackberry.api.browser).

获取一个浏览器对话(Session)

为了获取一个缺省的BrowserSession对象,调用静态方法Browser.getDefaultSession().本对象允许你访问正在BlackBerry设备上运行的浏览器.

为了新增一个约会,调用EventList.importEvent().
:获取缺省的对话会覆写任何BlackBerry设备上已经打开的对话.

为获取一个不同的对话,调用getSession().此方法根据它的唯一ID(UID)获取一个浏览器配置服务记录.为获得更多信息,参见113页的服务定制API”.

请求一个Web页面

为请求一个Web页面,调用BrowserSession.displayPage()方法.下面的实例使用了仅接受一个URLdisplayPage()方法.为指定一个referrer,HTTP,以及提交的数据,使用接受这些附加信息的方法.

代码实例

下面来自Restaurants.java实例的引用创建了一个菜单,此菜单会在浏览器中显示一个Web页面.

private MenuItem browserItem = new MenuItem(

       _resources.getString(MENUITEM_BROWSER), 110, 12) {

    public void run() {

       synchronized(store) {

           String websiteUrl = websitefield.getText();

           if (websiteUrl.length == 0) {

              Dialog.alert(_resources.getString(ALERT_NO_WEBSITE));

               }

           else {

              BrowserSession visit = Browser.getDefaultSession();

              visit.displayPage(websiteUrl);

              }

           }

       }

    };

在浏览器域显示Web内容

为了在应用程序UI里包含一个浏览器域,使用浏览器域API (net.rim.device.api.browser.field).浏览器呈现(rendering)库为域处理web内容的描绘,然后返回一个BrowserField-在此域URL内容得到描绘-到你的应用程序显示.
:用来打开一个浏览器域的浏览器对话独立于BlackBerry设备上缺省的浏览器对话. 任何打开的浏览器对话则不受影响.

RenderingApplication接口定义了一个描绘对话所需要的回调功能来帮助处理URL资源, RenderingApplication接口的实现在一个浏览器域里显示web内容.

为呈现创建一个独立的线程

当应用程序获取和显示浏览器域时,为阻止应用程序挂起,在一个独立线程上完成这些操作.

class CreationThread extends Thread {

    BrowserFieldHandlerApplication _callBackApplication;

    BasicRenderingApplication _renderingApplication;

    public CreationThread(BrowserFieldHandlerApplication callBackApplication) {

       _callBackApplication = callBackApplication;

       }

    public void run() {

       _renderingApplication = new BasicRenderingApplication(_callBackApplication);

       BrowserField field = _renderingApplication.getBrowserField("www.blackberry.com");

       _callBackApplication.displayBrowserField(field);

       }

}

设置呈现选项

覆写getRenderingOptions().如果你没有覆写此方法, 将使用缺省的呈现选项.为获得更多信息,参看API参考RenderingOptions.

处理事件

eventOccurred()的实现处理事件,例如一个URL请求.

public Object eventOccurred(Event event) {

    int eventId = event.getUID();

    switch (eventId) {

    case Event.EVENT_URL_REQUESTED : {

       UrlRequestedEvent e = (UrlRequestedEvent) event;

       // This is a regular request.

       String absoluteUrl = e.getURL();

       HttpConnection conn = null;

       OutputStream out = null;

       try {

           conn = (HttpConnection) Connector.open(absoluteUrl);

           FormData postData = e.getPostData();

           if (postData == null) {

              conn.setRequestMethod(HttpConnection.GET);

              }

           else {

              conn.setRequestMethod(HttpConnection.POST);

              byte[] postBytes = postData.getBytes();

               conn.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_LENGTH,

                     String.valueOf(postBytes.length));

              if (conn.getRequestProperty(

                     HttpProtocolConstants.HEADER_CONTENT_TYPE) == null) {

                  conn.setRequestProperty(

                         HttpProtocolConstants.HEADER_CONTENT_TYPE,

                         postData.getContentType());

                  }

              out = conn.openOutputStream();

              out.write(postBytes);

              }

           HttpHeaders requestHeaders = e.getHeaders();

           if (requestHeaders != null) {

              /* From http://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.3

               * Clients SHOULD NOT include a Referer header field in a

               * (non-secure) HTTP request if the referring page was

               * transferred with a secure protocol.*/

              String referer =

                  requestHeaders.getPropertyValue("referer");

              boolean sendReferrer = true;

              if (referer != null && referer.startsWith("https:") &&

                     !absoluteUrl.startsWith("https:")) {

                  sendReferrer = false;

                  }

              int size = requestHeaders.size();

              for (int i = 0; i < size; i++) {

                  String header = requestHeaders.getPropertyKey(i);

                  // Remove refer header if needed.

                  if ( !sendReferrer && header.equals("referer")) {

                     requestHeaders.removeProperty(i);

                     continue;

                     }

                  conn.setRequestProperty( header,

                         requestHeaders.getPropertyValue( i ) );

                  }

              }

           }

       catch (IOException e1) {

          

       }

       finally {

           if (out != null) {

              try {

                  out.close();

                  }

              catch (IOException e2) {

                 

              }

           }

       }

       BrowserField browserField = getBrowserField(conn, e);

       _callbackApplication.displayBrowserField(browserField);

       break;

       }

    case Event.EVENT_BROWSER_FIELD_CHANGED : {

       // Browser field title might have changed. Update title.

       break;

       }

    case Event.EVENT_REDIRECT : {

       RedirectEvent e = (RedirectEvent) event;

       switch (e.getType()) {

       case RedirectEvent.TYPE_SINGLE_FRAME_REDIRECT :

           // Show redirect message.

           Application.getApplication().invokeAndWait(new Runnable() {

              public void run() {

                  Status.show("");

                  }

              });

           break;

       case RedirectEvent.TYPE_JAVASCRIPT :

       case RedirectEvent.TYPE_META :

       case RedirectEvent.TYPE_300_REDIRECT :

       }

       String absoluteUrl = e.getLocation();

       HttpConnection conn = null;

       try {

           conn = (HttpConnection) Connector.open(absoluteUrl);

           }

       catch (IOException e1) {

          

       }

       BrowserField browserField = getBrowserField(conn,

              e.getOriginalEvent());

       _callbackApplication.displayBrowserField(browserField);

       break;

       }

    case Event.EVENT_CLOSE :

       // Close the appication.

       break;

       case Event.EVENT_SET_HEADER :// no cache support

       case Event.EVENT_SET_HTTP_COOKIE : // no cookie support

       case Event.EVENT_HISTORY : // no history support

       case Event.EVENT_LOADING_IMAGES :// no progress bar is supported

       case Event.EVENT_EXECUTING_SCRIPT : // no progress bar is supported

       case Event.EVENT_FULL_WINDOW : // no full window support

       case Event.EVENT_STOP : // no stop loading support

           default :

       }

    return null;

}

[1] [2] [3] [4] [5] [6]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码