2016-06-29 5 views
0

Ich benutze Cordova, um Plugins in meine App zu laden. Hier ist die vereinfachte reproduzierbaren Ausgabe:Warum funktioniert keines meiner Plugins für Apache Cordova?

cordova erstellen foo cordova Plugin hinzufügen plugin --save cordova Plattform hinzufügen android --save cordova android bauen --verbose

Ich kann diese App laufen phonegap und sehen, es auf meinem Handy. Die App meldet sich als Basis-App an. Alles sieht großartig aus.

Wenn ich in den Plugin-Ordner schaue, kann ich mein Plugin dort sehen. In diesem Fall heißt mein Plugin bluetoothle.

Ich bearbeite die index.js-Datei an einem Ort, der nach dem Gerät ausgelöst wird, und füge "alert (typeof (bluetoothle))" hinzu.

Ich erwarte, dass wenn die Warnung ausgelöst wird sollte es "Objekt" melden. Es tut das nicht. Es meldet "undefined".

Ich habe dies mit mehreren anderen Plugins versucht und ich bekomme immer das gleiche Ergebnis. Es scheint also, dass ich egal welches Plugin ich installiere, auf keine der Funktionen innerhalb des Plugins zugreifen kann.

Antwort

0

Ich habe das gleiche Problem. Aber ich benutze das Phonegap CLI. Und das folgende Plugin: https://github.com/randdusing/cordova-plugin-bluetoothle

füge ich das Plugin mit dem Befehl:

$ phonegap plugin add cordova-plugin-bluetoothle

Ich habe hinzugefügt Plattform Android und iOS.

Also im Ordner plugins befindet sich der Ordner cordova-plugin-bluetoothle, der höchstwahrscheinlich ein gültiges Plugin-Paket ist. Auch in den Plugin-Ordner gibt es die android.json und ios.json Datei den Abschnitt enthält:

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

in plaforms/Android gibt es die android.json Datei enthält:

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

in Plattformen/ios dort die ios.json Datei enthält:

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

I 23. Android SDK API ausgerichtet haben als die readme sagt ...

Wie ich gerade das Hello-World-Beispiel geändert habe, um bluetoothle zu initialisieren, nachdem das Deviceready-Ereignis ausgelöst hat.

Also wo könnte das Problem sein, so dass die Bluetooth-Variable nicht in der index.js Code definiert ist, wenn das Gerät bereit ist?

Also hier der vollständige Code von 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); 
    } 
}; 

Und der vollständige Code des Index.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,

Das Problem hatte ich, bevor ich "gearbeitet um" nur durch ein anderes Plugin für mein Bluetooth Low Energy Sachen verwenden.

Später lief ich das gleiche Problem noch einmal mit einem anderen Plugin.

Und dann endlich bekam ich das Bild, wo es Sinn macht:

ich in erster Linie wurde mit dem Phonegap Entwickler App on-the-fly zu testen. Die Phonegap Developer App wird mit allen Core Plugins und einigen anderen mitgeliefert.

!! Jene Plugins, die nicht bereits gebündelt sind, sind für Ihre Phonegap Developer App niemals zum Testen verfügbar !!

phonegap plugin add cordova-plugin-new-unbundled 

Wird nicht für die App verfügbar machen. Laden Sie die Dateien nur herunter und erstellen Sie sie für einen potenziellen echten Build vor.

Damit dies in der Phonegap Developer App funktioniert, müssen Sie Ihre eigene Phonegap Developer App erstellen und die benötigten Plugins hinzufügen.

Andernfalls sind Ihre Plugins nur in einem echten Build verfügbar.

Verwandte Themen