最近一段时间最火的移动应用组件是 Intent。在你的应用里设置一些 action,或者指定你的应用需要的服务,就可以完成想完成的事情。
在 Firefox OS 里, Intent 尤其重要。不管你的 web app 有多好用,这个应用总是要和设备上的其他的应用以及 activity 进行交互。这就是为什么有 Web Activity。
Intent 是我们最近发明的 WebAPI,也是让 web 变成强大的平台的一步。我们通过一个简单的 API 来指定应用中的 Intent,并且声明我们的应用可以接受其他应用的请求。
如果你还没有开始开发你的 web app,你应当首先阅读 Getting started with making apps。简而言之,web app 是 HTML5, CSS 和 JavaScript 以及应用声明的有机组合。
Web Activity 入门
调用 Web Activity 有若干种方法:
-
调用一个 activity,并由可以处理这个 activity 的应用展示出来
-
在声明文件中注册你的 activity
-
运行时注册 activity
-
在 activity 出现时通过 handler 注册你的应用
调用 activity
假设你的应用里有一个按钮,你可以从相机、画廊或者其他支持 activity 的应用里获取一张图片,比如:
var pick = new MozActivity({ name: "pick", data: { type: ["image/png", "image/jpg", "image/jpeg"] }});
在这个例子里,我们指定 activity 的名字 <tt class="docutils literal">pick</tt> ,并且选择接受 PNG 或者 JPEG 图片。接下来,你会看到下面的菜单:
用户在此选择图片的来源。一旦选择完毕,结果将送回发送请求的应用中。( 注意:处理 activity 的应用确定返回的数据 )
处理回应
大部分 WebAPI 都有 onsuccess 以及 onerror 的 event handler,Web Activity 也不例外。对于图片来讲,返回的数据是 blob,你可以直接用下面的代码在应用中显示图片:
pick.onsuccess = function () { // Create image and set the returned blob as the src var img = document.createElement("img"); img.src = window.URL.createObjectURL(this.result.blob); // Present that image in your app var imagePresenter = document.querySelector("#image-presenter"); imagePresenter.appendChild(img);};pick.onerror = function () { // If an error occurred or the user canceled the activity alert("Can't view the image!");};
为你的应用注册 activity
如前述,你可以将你的应用设为某 activity 的处理器。有两种方法实现:
使用声明文件进行注册
{ "name": "My App", "description": "Doing stuff", "activities": { "view": { "filters": { "type": "url", "url": { "required": true, "regexp":"/^https?:/" } } } }}
动态注册
var register = navigator.mozRegisterActivityHandler({ name: "view", disposition: "inline", filters: { type: "image/png" }});register.onerror = function () { console.log("Failed to register activity");}
处理 activity:
navigator.mozSetMessageHandler("activity", function (a) { var img = getImageObject(); img.src = a.source.url; /* Call a.postResult() or a.postError() if the activity should return a value */});
可用的 activity
目前,以下 activity 可用:
-
configure
-
costcontrol/balance
-
costcontrol/data_usage
-
costcontrol/telephony
-
dial
-
new (比如 type: “websms/sms”, “webcontacts/contact”)
-
open
-
pick (比如 type: “image/png”)
-
record
-
save-bookmark
-
share
-
test
-
view
一些例子
拨号
var call = new MozActivity({ name: "dial", data: { number: "10086" }});
写短信
var sms = new MozActivity({ name: "new", data: { type: "websms/sms", number: "10086" }});
新建联系人
var newContact = new MozActivity({ name: "new", data: { type: "webcontacts/contact", params: { // Will possibly move to be direct properties under "data" giveName: "中国", familyName: "移动", tel: "10086", email: "cmcc@10086.cn", address: "北京", note: "这是附录", company: "CMCC" } }});
查看网页
var openURL = new MozActivity({ name: "view", data: { type: "url", // Possibly text/html in future versions url: "http://robertnyman.com" }});
保存书签
var savingBookmark = new MozActivity({ name: "save-bookmark", data: { type: "url", url: "http://robertnyman.com", name: "Robert's talk", icon: "http://robertnyman.com/favicon.png" }});
试一试
现在,你可以试一试写一个调用 web activity 的 web app。你可以在 Firefox OS 模拟器里测试应用。
还在完善中
Web Activity 还在完善中,activity 的名称以及数据结构仍然可能改变。目前上面提到的东西,除了 mozRegisterActivityHandler 以及 mozSetMessageHandler 尚未实现,其他的都应当工作