立方 发表于 2013-2-4 02:32:28

详解为什么Enyo可以调用webOS中的系统服务

Enyo1.0提供了五个service,分别是:
system: “palm://com.palm.systemservice/”
telephony: “palm://com.palm.telephony/”
database: “luna://com.palm.db/”
application: “palm://com.palm.applicationManager/”
accounts: “palm://com.palm.service.accounts/”
通过调用这些service,我们可以获取很多与webOS系统相关的信息。那为什么webOS中的JavaScript(Enyo是JS框架)可以直接操作系统信息呢?
一切的秘密就在enyo\1.0\framework\source\palm\services\bridge\WebosConnect.js中。
在这个文件的59行开始,有下面的代码:
可以看出,enyo在页面中插入了一个applet标签,这里加入了webOSconnect_1_3.jar这个jar包,并且将要调用包中的com.palm.webos.connect.DeviceConnection类。
而这个jar包,正是与系统数据直接交互的组件,jar包中没有打入源码,我们也就无法具体的实现了。
其中第二部分:“从JavaScript中访问Java Applet小程序中的方法和变量”详细解释了调用流程。
我把其中的示例代码贴出来:
“mytest.htm”

[*]function accessApplet()
[*]{ setTimeout("changeText('I like JavaScript!')",1000);
[*]setTimeout("changeText('I like JavaScript and Java!')",2000);
[*]setTimeout("changeText('I like Java!')",3000);
[*]setTimeout("accessApplet()",4000);
[*]}
[*]function changeText(s)
[*]{
[*]window.document.testText.setText(s)
[*]//此处调用JavaApplet小程序的setText()方法
[*]//注意,小程序的名字必须为〈applet〉标志 name属性所标识
[*]}
[*]//通过调用accessApplet()装入小程序
“Testtext.java”

[*]import java.applet.*;
[*]……
[*]public class Testtext extends Applet
[*]{   ……
[*]public void setText(String s)   //setText()必须声明为“public”
[*]{
[*]text=s;
[*]repaint();
[*]}
[*]}

【编辑推荐】

[*]在Enyo框架下安装webOS 3.0 SDK教程
[*]在Enyo框架下编写webOS的“hello world!”
[*]讲解webOS开发的Enyo基础
[*]再谈webOS开发Enyo基础控件
页: [1]
查看完整版本: 详解为什么Enyo可以调用webOS中的系统服务