Native Android Phonegap Plugin

I am trying to get my own Android plugin in phonegap / cordova 3.0.0 mode, but I am not working,

ripple error: Uncaught ReferenceError: torch not defined

call from index.html

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

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> 

torch.js in the www folder of the plugin

 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; 

and 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); } } 
+6
source share
2 answers

I solved this, here is the code if someone else has the same problem:

javascript index

 <!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> 

js file with exec

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

and java file

 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); } } } 
+1
source

I don’t know that my answer can help you or not, but I often come across this error. The following is my code used by cordova1.7.0 a year ago, this error is not in your 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(); 

then register the plugin in the XML file as follows:

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

Finally, you must call this variable after the doucument 'deviceready' event.

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

Source: https://habr.com/ru/post/954945/


All Articles