我覺得背景振動是「不正式」支持Web的應用程序,但你可以激活它。 只需添加以下關鍵看你的config.xml:
<tizen:setting background-support="enable" background-vibration="enable" />
這將允許您振動,即使屏幕關閉。(參見第12頁中tizen-2.3-wrt-core-spec.pdf)
到目前爲止,這應該工作,但我認爲你不能上傳使用此設置的Tizen商店的應用程序...
[編輯]
今天,我玩了一下振動,只是想增加我的發現。 如果你不使用的背景振動=‘啓用’「鍵,似乎你有兩個選擇,但兩者都更像是一個解決辦法:
- 只要使用通知(Notification)這將推動一個 通知到手錶的通知區域包括一個 振動選項
- 另一種方式與鬧鐘是另一種方式,但它不僅需要一個警報,而且還需要一個 位。
您的應用程序需要一定的條件,能夠從後臺振動:
所以對於第二種方式,你需要做更多的東西。我創建嚮導(TAU基本)的新項目,並作爲midified跟着app.js:在onload事件
- :
var myAlarm = null;
var page = document.querySelector('#main');
var remoteMsgPort = null;
(function() {
window.addEventListener('tizenhwkey', function(ev) {
\t \t if(ev.keyName === "back") {
\t \t \t var page = document.getElementsByClassName('ui-page-active')[0],
\t \t \t \t pageid = page ? page.id : "";
\t \t \t if(pageid === "main") {
\t \t \t \t try {
\t \t \t \t \t // cleanup
\t \t \t \t \t showAfterWakeup(false);
\t \t \t \t \t tizen.power.unsetScreenStateChangeListener();
\t \t \t \t \t tizen.application.getCurrentApplication().exit();
\t \t \t \t } catch (ignore) {
\t \t \t \t }
\t \t \t } else {
\t \t \t \t window.history.back();
\t \t \t }
\t \t }
\t });
\t /**
\t * Method to set the app as topmost app. This causes the app to be shown
\t * after display turns on, instead of the clock face.
\t *
\t * @param {boolena}enable
\t * True to enable, false to disable
\t */
\t function showAfterWakeup(enable) {
\t \t var param = [{
\t \t \t key: "state",
\t \t \t value: enable ? "show" : "hide"
\t \t }];
\t \t
\t \t if(remoteMsgPort !== null) {
\t \t \t remoteMsgPort.sendMessage(param);
\t \t \t console.debug("remoteMsgPort.sendMessage(" + JSON.stringify(param) + ")");
\t \t }
\t }
\t
\t function checkLaunchRequest() {
\t \t var appControl,
\t \t \t appOperation,
\t \t \t ret = false;
\t \t
\t \t try {
\t \t \t appControl = tizen.application.getCurrentApplication().getRequestedAppControl().appControl;
\t \t \t appOperation = appControl.operation;
\t \t \t console.debug("checkLaunchRequest operation: " + appOperation);
\t \t \t
\t \t \t // check if operation view was used, as we set this for the alarm
\t \t \t if (appOperation.indexOf('http://tizen.org/appcontrol/operation/view') !== -1) {
\t \t \t \t console.debug("URI: " + JSON.stringify(appControl.uri));
\t \t \t \t // set as topmost app to be in foreground when screen turns on
\t \t \t \t showAfterWakeup(true);
\t \t \t \t // turn the screen on
\t \t \t \t tizen.power.turnScreenOn();
\t \t \t \t ret = true;
\t \t \t }
\t \t } catch (err) {
\t \t \t console.error("checkLaunchRequest Invalid launch request: " + err);
\t \t }
\t }
\t
\t function onScreenStateChanged(previousState, changedState) {
\t \t console.log("Screen state changed from " + previousState + " to " + changedState);
\t \t
\t \t if(previousState === "SCREEN_OFF" && changedState !== "SCREEN_OFF"){
\t \t \t console.log("screen changed to ON");
\t \t \t navigator.vibrate([250,100,350]);
\t \t \t showAfterWakeup(false);
\t \t }else if(previousState !== "SCREEN_OFF" && changedState === "SCREEN_OFF"){
\t \t \t // Triggers an alarm on a given date/time --> 10sec from now
\t \t \t var date = new Date();
\t \t \t date.setSeconds(date.getSeconds() + 10);
\t \t \t
\t \t \t // check if already a alarm was set and remove it to avoid multiple alarms
\t \t \t if(myAlarm !== null){
\t \t \t \t tizen.alarm.remove(myAlarm);
\t \t \t \t myAlarm = null;
\t \t \t }
\t \t \t
\t \t \t myAlarm = new tizen.AlarmAbsolute(date);
\t \t \t var appControl = new tizen.ApplicationControl("http://tizen.org/appcontrol/operation/view");
\t \t \t tizen.alarm.add(myAlarm, tizen.application.getCurrentApplication().appInfo.id, appControl);
\t \t \t console.log("Alarm added set for: " + date.toLocaleTimeString() + " with id: " + myAlarm.id);
\t \t \t
\t \t }
\t }
\t
\t /**
\t * Callback for pageshow event
\t */
\t function onPageShow(){
\t \t console.log("pageshow");
\t \t /*
\t \t * check if alarm called app
\t \t * if false we interpret as the first app start, not clean but will do it for demo ;)
\t \t */
\t \t if(checkLaunchRequest() !== true){
\t \t \t // just for testing vibration
\t \t \t var text = document.querySelector('.ui-listview');
\t \t \t text.addEventListener('click', function(ev) {
\t \t \t \t console.log("clicked: " + ev.target.nodeName);
\t \t \t \t navigator.vibrate(500);
\t \t \t });
\t \t }
\t }
\t /**
\t * init view
\t */
\t function init(){
\t \t try {
\t \t \t remoteMsgPort = tizen.messageport.requestRemoteMessagePort('starter', 'Home.Reserved.Display');
\t \t } catch (err) {
\t \t \t console.error("Exception for requestRemoteMessagePort: " + err);
\t \t }
\t \t showAfterWakeup(false);
\t \t page.addEventListener('pageshow', onPageShow);
\t \t // Sets the screen state change listener.
\t \t tizen.power.setScreenStateChangeListener(onScreenStateChanged);
\t }
\t
\t window.onload = init();
}());
那麼,什麼都是在這裏完成我們註冊了一個遠程消息端口 (MessagePort),併爲「頁面顯示」和屏幕狀態更改添加了一些事件監聽器。
- 應用程序啓動後,我們等到的應用程序切換到後臺和屏幕 關閉
- 在onScreenStateChanged我們得到的是屏幕關閉 ,我們添加一個新的警報將在10秒被觸發。
- 該警報觸發應用程序和pageShow事件,以便調用 checkLaunchRequest。
- 的應用控制操作... /視圖,以便應用程序設置爲最頂層 應用程序,並在屏幕開啓時
- 現在我們在onScreenStateChanged又是,但是這次看到 屏幕被打開並做振動
我知道這似乎是超載只是振動,但我認爲這是振動100%的唯一方法是在屏幕關閉後工作。 在https://www.w3.org/TR/2014/WD-vibration-20140211/他們描述,如果應用程序不可見,它不應該振動,所以我認爲這就是爲什麼屏幕需要打開,應用程序需要在前臺。 不知何故,如果應用程序在後臺不能振動,它似乎是合乎邏輯的...
我希望這有助於;)
但我不想做第二個應用程序。服務器會稍後發送一條消息,我想只顯示一個彈出窗口。第一種方法不起作用。有沒有其他方法? – Tim
你能否詳細解釋一下你的應用程序?你提到的服務器,它是單獨的應用程序?如果是的話,應用程序在背景時如何接收消息?我猜你已經知道當應用程序處於前景時振動手機的方式。在背景情況下,您需要服務應用程序。 –
我有一個球衣網站服務器,以便我從我的Gear S網絡應用程序發送傳感器數據。這在後臺運行。當發現不規則時,服務器將發回一條消息,該消息也在後臺運行。當我收到這條消息時,當應用程序處於後臺時,我可以點亮屏幕,但不能讓它振動。如何才能做到這一點? – Tim