2016-06-29 79 views
0

我正在使用cordova將插件加載到我的應用程序中。這裏是簡化reproduceable問題:爲什麼我的插件沒有爲Apache Cordova工作?

科爾多瓦創建富 科爾多瓦插件添加pluginname --save 科爾多瓦平臺添加的Android --save 科爾多瓦構建Android --verbose

我可以使用PhoneGap的運行這個應用程序,看看它在我的手機上。該應用程序已將設備報告爲基本入門應用程序應該具備的功能。迄今爲止看起來都很棒。

如果我查看插件文件夾,我可以在那裏看到我的插件。在這種情況下,我的插件被稱爲bluetoothle。

我編輯index.js文件的位置,在設備發生後觸發,並添加「alert(typeof(bluetoothle));」

我希望當警報觸發時它應該報告「對象」。它不這樣做。它報告「未定義」。

我已經試過這與其他幾個插件,我總是得到相同的結果。所以看起來無論我安裝什麼插件,我都無法訪問插件中的任何功能。

回答

0

我確實有同樣的問題。但是我正在使用Phonegap CLI。而下面的插件:https://github.com/randdusing/cordova-plugin-bluetoothle

我用命令添加插件:

$ phonegap plugin add cordova-plugin-bluetoothle

我已經添加了平臺,Android和iOS。

因此,在plugins文件夾中,cordova-plugin-bluetoothle文件夾最有可能是一個有效的插件數據包。 此外,在插件文件夾有包含節的android.json和ios.json文件:

"cordova-plugin-bluetoothle": { 
    "PACKAGE_NAME": "com.phonegap.helloworld" 
}, 
在plaforms

/機器人有含有android.json文件:在平臺

{ 
    "xml": "<feature name=\"BluetoothLePlugin\"><param name=\"android-package\" value=\"com.randdusing.bluetoothle.BluetoothLePlugin\" /></feature>", 
    "count": 1 
}, 

/IOS有包含ios.json文件:我已經有針對性的Android SDK API 23.作爲自述告訴

{ 
    "xml": "<feature name=\"BluetoothLePlugin\"><param name=\"ios-package\" value=\"BluetoothLePlugin\" /></feature>", 
    "count": 1 
}, 

...

正如我剛剛修改了hello-world示例,以在deviceready事件觸發後調用bluetoothle進行初始化。

那麼問題出現在哪裏,以便在設備準備就緒時,index.js代碼中未定義bluetoothle變量?

所以這裏index.js的完整代碼:

var bluetoothle; 

var app = { 
    // Application Constructor 
    initialize: function() { 
     this.bindEvents(); 
    }, 
    // Bind Event Listeners 
    // 
    // Bind any events that are required on startup. Common events are: 
    // 'load', 'deviceready', 'offline', and 'online'. 
    bindEvents: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
    }, 
    // deviceready Event Handler 
    // 
    // The scope of 'this' is the event. In order to call the 'receivedEvent' 
    // function, we must explicitly call 'app.receivedEvent(...);' 
    onDeviceReady: function() { 
     app.receivedEvent('deviceready'); 
     console.log("platform: " + device.platform); 

     if(bluetoothle) { 
      console.log("bluetooth is not defined!");  
     } else { 
      console.log("bluetooth is not defined!");  
     } 

     console.log("yhea managed to initialize Bluetooth LE!"); 
    }, 
    // Update DOM on a Received Event 
    receivedEvent: function(id) { 
     var parentElement = document.getElementById(id); 
     var listeningElement = parentElement.querySelector('.listening'); 
     var receivedElement = parentElement.querySelector('.received'); 

     listeningElement.setAttribute('style', 'display:none;'); 
     receivedElement.setAttribute('style', 'display:block;'); 

     console.log('Received Event: ' + id); 
    } 
}; 

和索引的完整代碼。HTML:

<html> 

<head> 
    <meta charset="utf-8" /> 
    <meta name="format-detection" content="telephone=no" /> 
    <meta name="msapplication-tap-highlight" content="no" /> 
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" /> 
    <!-- This is a wide open CSP declaration. To lock this down for production, see below. --> 
    <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *" /> 
    <!-- Good default declaration: 
    * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication 
    * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly 
    * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this: 
     * Enable inline JS: add 'unsafe-inline' to default-src 
     * Enable eval(): add 'unsafe-eval' to default-src 
    * Create your own at http://cspisawesome.com 
    --> 
    <!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: 'unsafe-inline' https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *" /> --> 

    <link rel="stylesheet" type="text/css" href="css/index.css" /> 
    <title>Hello World</title> 
</head> 

<body> 
    <div class="app"> 
     <h1>PhoneGap</h1> 
     <div id="deviceready" class="blink"> 
      <p class="event listening">Connecting to Device</p> 
      <p class="event received">Device is Ready</p> 
     </div> 
    </div> 
    <script type="text/javascript" src="cordova.js"></script> 
    <script type="text/javascript" src="js/index.js"></script> 
    <script type="text/javascript"> 
     app.initialize(); 
    </script> 
</body> 

</html> 
0

的sooo,

問題我收到我只是「工作圍繞」通過使用不同的插件我的藍牙低能量的東西。

後來我又碰到了另一個插件的問題。

然後,我終於得到了圖片的地方都有道理:

我主要是使用PhoneGap的開發者應用程序來測試即時。 Phonegap開發應用程序捆綁了所有的核心插件和其他一些。

!!這些未被捆綁的插件將永遠不可用於您的Phonegap開發應用程序進行測試!

phonegap plugin add cordova-plugin-new-unbundled 

不會提供給應用程序。只能下載和預建可能的實際構建文件。

要在Phonegap Developer App中完成這項工作,您需要構建自己的Phonegap Developer App,添加所需的插件。

否則你的插件只能在真實的版本中使用。