BCSphere入門教程06:使用Cordova標準模組

李治發表於2014-07-28

BCSphere是一款基於Cordova WebView的瀏覽器,為了使用javascript介面訪問智慧手機本地資源以支援更多種類的智慧硬體應用,BCSphere將Cordova官方提供的模組(外掛)進行了底層的封裝。開發人員可以參考Cordova Plugin API進行使用。當然,我們也將繼續豐富自定義的模組來支援更多智慧硬體應用的開發。在不久的將來,我們將推出類似Node.js的NPM模組託管系統,您可以使用它來共享您的模組,來幫助我們擴充套件BCSphere的功能。
本章就來介紹在BCSphere中使用Cordova的Notification模組,本章程式碼基於上一章程式碼,增加讓一個智慧硬體可以控制手機發出聲音的feature,完成手機與硬體之間的雙向找尋的功能。

硬體最小支援

Service: Immediate Alert
UUID: 00001802-0000-1000-8000-00805f9b34fb

Characteristic: Immediate Alert
UUID: 00002a26-0000-1000-8000-00805f9b34fb
Property: Write || WriteWithoutResponse
Function: 寫入Hex值0,裝置停止發出聲音;寫入Hex值1,裝置發出聲音


Service: Custom Service
UUID: 0000ffe0-0000-1000-8000-00805f9b34fb

Characteristic: Custom Characteristic
UUID: f000ffe1-0451-4000-b000-000000000000
Property: Notify || indicate
Function: 點選在開發板上的某個按鈕,就會傳送一個Notify或者Indicate命令到手機端


引入Notification模組

在index.html檔案中在org.bcsphere.bcjs模組引入後引入如下script結點:

<script type="text/javascript" src="http://115.29.149.19:3000/framework/org.apache.cordova.dialogs/notification.js"></script>

deviceready事件中引入org.apache.cordova.dialogs.notification模組:

    document.addEventListener('deviceready',function(){
        navigator.notification = cordova.require('org.apache.cordova.dialogs.notification');
    },false);

bcready事件中連線並訂閱那個支援Notify屬性的特徵值:

document.addEventListener('bcready', function(){
        app.device = new BC.Device({deviceAddress:DEVICEADDRESS,type:DEVICETYPE});
        app.device.connect(function(){
            app.device.discoverServices(function(){
                var service = app.device.getServiceByUUID('ffe0')[0];
                service.discoverCharacteristics(function(){
                    var character = service.getCharacteristicByUUID('f000ffe1-0451-4000-b000-000000000000')[0];
                    character.subscribe(function(){
                        navigator.notification.beep();
                    });
                },function(){
                    alert("discover characteristics error!");
                });
            },function(){
                alert("discover services error!");
            });
        });

    }, false);

最後再增加一個stopBeep的方法,繫結在前端的按鈕點選事件上:

stopBeep : function(){
    navigator.notification.stopBeep();
},

至此,已經可以完成當在智慧硬體上發出一個Notify的時候就可以讓手機發出聲響了,當然這個階段BCSphere還不完善,後面會開放更多的模組更全的功能模組。更多模組可以參考這裡。本章同樣提供了原始碼

從前面幾章的原始碼可以看到,訪問一個特徵值需要寫的層次程式碼依然很多,下一章我們就介紹一種全新的方式來進行GATT的操作。

相關文章