2013-09-30 17 views
6

ich versuche, meine Mutter android-Plugin auf phonegap/cordova 3.0.0 laufen zu bekommen, aber ich arbeite nicht,Phonegap nativen Android-Plugin

der Fehler von Ripple: Uncaught Reference: Brenner ist nicht

definiert

der Anruf von der index.html

<button onclick="torch.shine(200);">dummy</button> 

der plugin.xml

<!-- android --> 
<platform name="android"> 
    <config-file target="res/xml/config.xml" parent="/*"> 

     <feature name="Torch"> 
      <param name="android-package" value="org.holzi.torch.Torch"/> 
      <param name="onload" value="true" /> 
     </feature> 

    </config-file> 

     <js-module src="www/torch.js" name="Torch"> 
     <clobbers target="torch" /> 
    </js-module> 

    <source-file src="src/android/Torch.java" target-dir="src/org/holzi/torch" /> 

    <config-file target="AndroidManifest.xml" parent="/manifest"> 
     <uses-permission android:name="android.permission.VIBRATE"/> 
     <uses-permission android:name="android.permission.CAMERA"/> 
    </config-file> 
</platform> 

die torch.js im www-Ordner des Plugins

var exec = require('cordova/exec'); 

/* constructor */ 
function Torch() {} 

Torch.shine = function() { 
     exec(
      function(result){ alert('ok: '+reply);  }, 
      function(err){ alert('Error: '+err); } 
     , "Torch", "shine", ['200']); 
} 



var torch = new Torch(); 
module.exports = torch; 

und der Torch.java

/* 

*/ 
package org.holzi.torch; 

import org.apache.cordova.CallbackContext; 
import org.apache.cordova.CordovaPlugin; 
import org.json.JSONArray; 
import org.json.JSONException; 

import android.content.Context; 
import android.os.Vibrator; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 


public class Torch extends CordovaPlugin { 

    Camera camera; 
    Camera.Parameters Parameters; 


    public Torch() { 

    } 


    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 
     if (action.equals("shine")) { 
      this.shine(20); 
     } 
     else { 
      return false; 
     } 

     // Only alert and confirm are async. 
     callbackContext.success(); 
     return true; 
    } 


    public void shine(int time) { 

     //Torch torch = (Torch) this.cordova.getActivity().getSystemService(Context.VIBRATOR_SERVICE); 
     //torch.shine(time); 

     camera = Camera.open(); 
     Parameters p = camera.getParameters(); 
     p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(p); 

    } 
} 

Antwort

1

i löste es, hier den Code, wenn jemand anderes das gleiche Problem haben:

der Index mit dem Javascript

<!DOCTYPE html> 
    <html> 
     <head> 
     <title>Notification Example</title> 

     <script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
     <script type="text/javascript" charset="utf-8"> 


     document.addEventListener("deviceready", onDeviceReady, false); 

     // Cordova is ready 
     function onDeviceReady() { 
      // Empty 
     } 

     function shine(torchOn) { 
      navigator.notification.shine(torchOn); 
     } 

     function alertTorchError(message) { 
      alert(message); 
     } 

     </script> 
     </head> 
     <body> 
     <p>&nbsp;</p> 
     <p>&nbsp;</p> 
     <p><a href="#" onclick="shine(true); return false;">AN</a></p> 
     <p>&nbsp;</p> 
     <p>&nbsp;</p> 
     <p><a href="#" onclick="shine(false); return false;">AUS</a></p> 
     </body> 
    </html> 

die js-Datei mit dem exec

var exec = require('cordova/exec'); 
module.exports = { 
     shine: function(turnOn) { 
     exec(null, function(error) { alertTorchError(error); }, "Torch", "shine", [turnOn]); 

    }, 

}; 

und die Java-Datei

package org.apache.holzi.torch; 

import org.apache.cordova.CallbackContext; 
import org.apache.cordova.CordovaPlugin; 
import org.json.JSONArray; 
import org.json.JSONException; 
import android.content.Context; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 

import android.content.pm.PackageManager; 


/** 
* This class provides access to the Torch on the device. 
*/ 
public class Torch extends CordovaPlugin { 


    Camera camera; 
    Camera.Parameters Parameters; 
    boolean hasFlash; 


/* Constructor */ 
    public Torch() { } 

    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 

     if (action.equals("shine")) { 

       hasFlash = this.cordova.getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); 

       if (!hasFlash) { callbackContext.error("no torch found"); } 
       else { this.shine(args.getBoolean(0)); 

    } 

     } 
     else {   
     return false; 
     } 
     return true; 
    } 


    //-------------------------------------------------------------------------- 
    // LOCAL METHODS 
    //-------------------------------------------------------------------------- 


    public void shine(boolean turnOn) { 



     if (camera == null) { camera = Camera.open(); } 

     if (turnOn) { 
      Parameters p = camera.getParameters(); 
     p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(p); 
     } 
     else { 
      Parameters p = camera.getParameters(); 
     p.setFlashMode(Parameters.FLASH_MODE_OFF); 
     camera.setParameters(p); 
     } 

    } 
} 
0

Ich weiß nicht die Antwort, die Sie helfen könnten oder nicht, aber ich begegne diesen Fehler viele Male.Das folgende ist mein Code verwenden cordova1.7.0 vor einem Jahr, dieser Fehler nicht in Ihrem Java-Code.

var Music = function() {}; 
    Music.prototype.exec = function(action, args, successCallback,errorCallback) { 
    if (typeof successCallback !== "function") { 
    console.log("GetResource: successCallback is not a function"); 
    return;} 

    console.log("JS function execute --OK"); 

    if (errorCallback && (typeof errorCallback !== "function")) { 
    console.log("GetResource: errorCallback is not a function"); 
    return;} 

    PhoneGap.exec(successCallback, errorCallback, "MusicPlugin", action, args); 
    }; 

    navigator.music=window.music = new Music(); 

dann, registrieren Sie das Plugin in der XML-Datei wie folgt aus:

--your plugin package-- 
<plugin name="MusicPlugin" value="***.***.***.MusicPlugin"></plugin> 

schließlich, sollten Sie diese Variable nach dem 'deviceready' Veranstaltung doucument aufzurufen.

document.addEventListener('deviceready',function()); 
+0

Ich habe mein Problem nicht wirklich gelöst, aber danke für deine Antwort, ich werde an dem Problem arbeiten und es veröffentlichen, wenn ich das Problem gelöst habe – miholzi