<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Chasing an mobile web vision

    闖蕩在移動(dòng)互聯(lián)網(wǎng)的世界中

    2009年3月9日 #

    移動(dòng)互聯(lián)網(wǎng)時(shí)代--Android上的一個(gè)例子

    我們來(lái)演示一個(gè)獲取聯(lián)系人,并用網(wǎng)頁(yè)展現(xiàn)出來(lái)的簡(jiǎn)單例子。

     首先,我們?cè)趀clipse環(huán)境中創(chuàng)建一個(gè)Android project,我們的Activity名稱(chēng)是com.example.RIAExample,并且修改界面的layout文件如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation
    ="vertical"
        android:layout_width
    ="fill_parent"
        android:layout_height
    ="fill_parent"
        
    >
    <WebView android:id="@+id/web"
     android:layout_width
    ="fill_parent" android:layout_height="fill_parent">
    </WebView>
    </LinearLayout>

    可以看到,界面中僅僅包含一個(gè)WebView控件。

     接下來(lái),創(chuàng)建一個(gè)簡(jiǎn)單的java類(lèi)來(lái)描述一個(gè)聯(lián)系人的信息,它包含聯(lián)系人姓名和號(hào)碼。

     

    package com.example;

    import java.util.Vector;

    import android.app.Activity;
    import android.os.Bundle;
    import android.webkit.WebView;

    public class RIAExample extends Activity {
        
        
    private WebView web;
        
        
    //模擬號(hào)碼簿
        private Vector<Person> phonebook = new Vector<Person>();
        
    /** Called when the activity is first created. */
        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
    this.initContacts();
            web 
    = (WebView)this.findViewById(R.id.web);
            web.getSettings().setJavaScriptEnabled(
    true);//開(kāi)啟javascript設(shè)置,否則WebView不執(zhí)行js腳本
            web.addJavascriptInterface(this"phonebook");//把RIAExample的一個(gè)實(shí)例添加到j(luò)s的全局對(duì)象window中,
                                                            
    //這樣就可以使用window.phonebook來(lái)調(diào)用它的方法
            web.loadUrl("file:///android_asset/phonebook.html");//加載網(wǎng)頁(yè)
         
        }

        
        
    /**
         * 該方法將在js腳本中,通過(guò)window.phonebook.getContacts()進(jìn)行調(diào)用
         * 返回的JavaArrayJSWrapper對(duì)象可以使得在js中訪問(wèn)Java數(shù)組
         * 
    @return
         
    */

        
    public JavaArrayJSWrapper getContacts(){
            System.out.println(
    "fetching contacts data");
            Person[] a 
    = new Person[this.phonebook.size()];
            a 
    = this.phonebook.toArray(a);
            
    return new JavaArrayJSWrapper(a);
        
        }

        
        
    /**
         * 初始化電話號(hào)碼簿
         
    */

        
    public void initContacts(){
            Person p 
    = new Person();
            p.name 
    = "Perter";
            p.phone_number 
    = "8888888";
            phonebook.add(p);
            p 
    = new Person();
            p.name 
    = "Jack";
            p.phone_number 
    = "777777";
            phonebook.add(p);
           
        }

        
        
    /**
         * 通過(guò)window.phonebook.debugout來(lái)輸出js調(diào)試信息。
         * 
    @param info
         
    */

        
    public void debugout(String info){
            
            System.out.println(info);
        }

    }

    下面是html文件,它非常簡(jiǎn)單。
    <html>
        
    <head>
            
    <script type="text/javascript" src="fetchcontacts.js"/>
    </head>
    <body>
        
    <div id = "contacts">
            
    <p> this is a demo </p>
        
    </div>
    </body>
    </html>

    而主角就是我們的javascript腳本fetchcontacts.js
    window.onload= function(){
        window.phonebook.debugout(
    "inside js onload");//調(diào)用RIAExample.debugout
        var persons = window.phonebook.getContacts();//調(diào)用RIAExample.getContacts()
        if(persons){//persons實(shí)際上是JavaArrayJSWrapper對(duì)象
            window.phonebook.debugout(persons.length() + " of contact entries are fetched");
            
    var contactsE = document.getElementById("contacts");
            
    var i = 0
            
    while(i < persons.length()){//persons.length()調(diào)用JavaArrayJSWrapper.length()方法
                
                pnode 
    = document.createElement("p");
                tnode 
    = document.createTextNode("name : " + persons.get(i).getName() + " number : " + persons.get(i).getNumber());//persons.get(i)獲得Person對(duì)象,然后在js里面直接調(diào)用getName()和getNumber()獲取姓名和號(hào)碼
                pnode.appendChild(tnode);
                contactsE.appendChild(pnode);
                i 
    ++;
            }

        }
    else{
            window.phonebook.debugout(
    "persons is undefined");
        }

        
    }


     例子很簡(jiǎn)單,我加了注釋希望有助大家理解,其他我就不深入解釋了。
    我把例子的源代碼放上來(lái),你可以下來(lái)試一試。

    RIADemo

    這個(gè)例子說(shuō)明通過(guò)WebView.addJavascriptInterface方法,我們可以擴(kuò)展JavaScript的API,獲取Android的數(shù)據(jù)。這樣,JS的粉絲就可以使用Dojo,JQuery,Prototy等這些知名的js框架來(lái)搭建android應(yīng)用程序來(lái)展現(xiàn)它們很酷很玄的效果!但是,目前addJavascriptInterface還不夠靈活強(qiáng)大,為什么呢?敬請(qǐng)關(guān)注第四篇“what next?”


    posted @ 2009-03-14 16:16 勤勞的蜜蜂 閱讀(5486) | 評(píng)論 (6)編輯 收藏

    移動(dòng)互聯(lián)網(wǎng)時(shí)代--忽如一夜春風(fēng)來(lái),web花開(kāi)各終端

    自從Apple在safari上使用webkit并移植到iphone后,webkit就仿佛是獲得了選秀第一名似的,吸引了眾多眼球。
    其實(shí),我最早聽(tīng)說(shuō)webkit是在iphone出來(lái)前一兩年,當(dāng)時(shí)有報(bào)道說(shuō)Nokia正在采用webkit為它下一代的Symbian平臺(tái)做一個(gè)引擎,而且還有專(zhuān)門(mén)的社區(qū),但比較封閉,很難進(jìn)入那個(gè)圈子,讓人一點(diǎn)感覺(jué)沒(méi)有。不過(guò),至少說(shuō)明Nokia很早就盯上這一塊了。
    iphone發(fā)布后,Apple似乎就接管webkit了,從此,webkit社區(qū)就有了巨大變化。Apple把能開(kāi)放的東西都放到了webkit社區(qū)里面,速度還相當(dāng)?shù)目欤ㄓ肁pple自己的話說(shuō),他們貢獻(xiàn)了81%的力量,看看webkit社區(qū)的主力開(kāi)發(fā)人員,有多少來(lái)自Apple!)現(xiàn)在,我們時(shí)不時(shí)的可以看到webkit的更新,比如對(duì)html5的跟進(jìn),css的特效等新功能!其中不得不重點(diǎn)提出的是2008年6月2日,webkit社區(qū)發(fā)布了高性能javascript引擎SquirrelFish!9月3日google chrome發(fā)布,采用了V8 javascript引擎,號(hào)稱(chēng)比SquirrelFish還快,兩個(gè)禮拜后webkit就發(fā)布了SquirrelFish Extreme給予正面還擊。巨頭們牟足了勁爭(zhēng)先把javascript引擎油門(mén)踩到底!我不想猜測(cè)他們賣(mài)力的真正原因,但是,我覺(jué)得隨著移動(dòng)終端能力加強(qiáng),javascript大面積攻進(jìn)終端已經(jīng)指日可待了,iphone和android已經(jīng)實(shí)現(xiàn)了。
    這期間,由于Apple的快速組合拳,Nokia經(jīng)營(yíng)的webkit專(zhuān)區(qū)很快就倒閉了。但他并沒(méi)有放棄對(duì)webkit的投入,2008年1月28日Nokia宣布收購(gòu)了Trolltech公司。現(xiàn)在Trolltech lab作為Nokia的代表仍然活躍在webkit社區(qū)之中。就前兩天,他們還在http://planet.webkit.org/發(fā)布了一篇標(biāo)題極其引人的博文“Creating a Google chat client in 15 minutes”,為QWebView做了一把廣告,相信qt的粉絲肯定不會(huì)錯(cuò)過(guò)。而本月初發(fā)布的qt4.5中,明確指出qt加強(qiáng)了對(duì)webkit諸如SquirrelFish等新功能的整合。那么就讓我們期待一下Nokia的新款機(jī)器吧。
    到此,我們已經(jīng)看到Google, Apple, Nokia, Palm等移動(dòng)終端的領(lǐng)頭羊們所采取的行動(dòng),然而,不要忘記軟件廠商!Adobe就是杰出的代表。作為RIA的強(qiáng)烈倡導(dǎo)者,他也選擇把webkit整合到其AIR平臺(tái),你可以想象這個(gè)webkit+flash的威力有多強(qiáng)大!而Adobe發(fā)起的openscreen項(xiàng)目,更是表明了他要在RIA上爭(zhēng)奪王位的野心!
    好了,不啰嗦那么多了,總之呢,webkit已經(jīng)成為移動(dòng)互聯(lián)網(wǎng)這出大戲的主角了,回歸到我在上一篇中提到的主題,讓我們來(lái)研究一下android.webkit.WebView的功能,來(lái)看android上的RIA。
    敬請(qǐng)關(guān)注下一篇--使用WebView的小例子。

    posted @ 2009-03-10 22:39 勤勞的蜜蜂 閱讀(2286) | 評(píng)論 (0)編輯 收藏

    移動(dòng)互聯(lián)網(wǎng)時(shí)代的終端--暫時(shí)遺忘OSGi,讓我們?nèi)テ肺兑槐璦ndroid磨出的移動(dòng)互聯(lián)網(wǎng)咖啡吧

    1年多前,揣著在移動(dòng)終端推廣OSGi的夢(mèng)想,我離開(kāi)了原來(lái)的公司,來(lái)到了一個(gè)自認(rèn)為更利于osgi的地方,在我看來(lái)osgi擁有eRCP這樣的粉絲,應(yīng)該會(huì)給它在移動(dòng)終端上提供廣闊的舞臺(tái)。然而半路殺出個(gè)程咬金,google android!第一次見(jiàn)到它時(shí),我不相信osgi會(huì)輸,于是就廢寢忘食的研究它,結(jié)果我沒(méi)有進(jìn)行太多的抵抗,很快就被Android收編了。我得承認(rèn)它在某些關(guān)鍵的因素,確實(shí)比osgi更適合移動(dòng)終端。對(duì)此,我只能感嘆google開(kāi)源的偉大,以及摒棄jcp的雷厲風(fēng)行!但是,更為重要的是,在移動(dòng)互聯(lián)網(wǎng)時(shí)代即將到來(lái)的時(shí)刻,Android為我們打開(kāi)了一扇方便之門(mén),這到底為何?

    通過(guò)對(duì)Android的(java)源碼進(jìn)行掃描后,我看到了像jsr211,MVM這些老朋友的影子,嗯,我可不想再炒這些舊飯了。還有啥?網(wǎng)上熱炒android用了webkit作為其瀏覽器的引擎,和iphone的safari使用的引擎一樣,這個(gè)東西應(yīng)該不錯(cuò),因?yàn)槲乙恢庇X(jué)得eRCP沒(méi)有很好的web控件,使得它在移動(dòng)平臺(tái)上遜色不少,于是我翻到了android.webkit這個(gè)java包,wow! Google給webkit封裝了很多java的接口,這真是java開(kāi)發(fā)人員的福氣,(聽(tīng)說(shuō)很多java開(kāi)發(fā)人員對(duì)sun的javafx期待度最高的就是一個(gè)傳說(shuō)中的JWebView控件,但是不知道出來(lái)沒(méi),算了,我懶得查證了,因?yàn)榘超F(xiàn)在不想浪費(fèi)太多在sun java上,呵呵),不過(guò)我覺(jué)得這更是廣大互聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)人員的福氣!想想!用html + css + javascript就能編寫(xiě)android的類(lèi)似電話簿,日歷甚至手機(jī)桌面的應(yīng)用,這難道不讓您浮想聯(lián)翩嗎?所以,如果說(shuō)Android為移動(dòng)終端進(jìn)入互聯(lián)網(wǎng)開(kāi)了一扇門(mén),那么android.webkit.WebView就是這扇門(mén)的金鑰匙,而webkit就是通向互聯(lián)網(wǎng)的康莊大道!

    其實(shí)android的webview是一個(gè)極端復(fù)雜的控件,而我個(gè)人認(rèn)為它是可以實(shí)現(xiàn)現(xiàn)在熱炒的RIA/webos等概念的基石!雖然我進(jìn)入這個(gè)領(lǐng)域不長(zhǎng),但覺(jué)得它非常有意思,很有前途,所以我打算寫(xiě)一個(gè)系列,分享對(duì)它的理解,強(qiáng)烈歡迎各位高手指點(diǎn)!

    怎么開(kāi)始說(shuō)呢?不知道大家有沒(méi)有注意,年初Palm公司在CES上palm pre的基于webkit的webos驚艷之秀,十足掉起了大家的胃口,這是我聽(tīng)到第一個(gè)冠以webos的移動(dòng)終端,這是不是意味著目前由palm來(lái)唱這個(gè)webos的獨(dú)角戲呢?答案當(dāng)然不是,其實(shí)很多終端廠家以及平臺(tái)廠商很早就率領(lǐng)大部隊(duì)兵臨webos的城下了,相信很快一場(chǎng)硝煙彌漫的戰(zhàn)爭(zhēng)就要開(kāi)始了......

    欲知端的,敬請(qǐng)關(guān)注移本系列第二篇--忽如一夜春風(fēng)來(lái),web花開(kāi)各終端

    posted @ 2009-03-09 22:53 勤勞的蜜蜂 閱讀(3448) | 評(píng)論 (7)編輯 收藏

    主站蜘蛛池模板: 日本久久久久亚洲中字幕| 免费福利在线视频| 亚洲一级高清在线中文字幕| 国产亚洲AV手机在线观看| 国产高清在线免费视频| 国产va精品免费观看| 国产猛男猛女超爽免费视频| 免费无码又爽又黄又刺激网站| 激情内射亚洲一区二区三区爱妻| 精品亚洲综合久久中文字幕| 亚洲国产高清在线一区二区三区| 成人免费网站在线观看| 中国在线观看免费高清完整版| 久久中文字幕免费视频| 四虎国产精品免费永久在线| 丁香六月婷婷精品免费观看| 黄页网址大全免费观看12网站| 亚洲αⅴ无码乱码在线观看性色| 亚洲一区二区三区高清视频| 亚洲精品视频免费看| 亚洲国产美国国产综合一区二区 | 亚洲激情校园春色| 亚洲AV无码精品色午夜果冻不卡 | 免费亚洲视频在线观看| 综合一区自拍亚洲综合图区| 亚洲乱妇老熟女爽到高潮的片 | 精品国产免费一区二区| 欧美三级在线电影免费| 黄页网站免费观看| 欧美三级在线电影免费| 成年美女黄网站18禁免费| 成人无码区免费视频观看| 毛片基地免费观看| 好吊妞在线新免费视频| 国产精品色午夜视频免费看| 日本一道一区二区免费看| 免费永久看黄在线观看app| 国产真实伦在线视频免费观看| 又粗又硬又大又爽免费视频播放| 又粗又大又硬又爽的免费视频 | 免费毛片毛片网址|