Mit Phonegap lässt sich nativer Code triggern aus Javascript heraus mit folgendem Code:
//onDeviceReady
cordova.exec( success, fail, "UploadImage", "nativeAction", ["success"]);
function success (result) {
alert("SUCCESS: \r\n"+result );
}
function fail (error) {
alert("ERROR: \r\n"+error );
}
Dieser Code ruft die Klasse UploadImage die Funktion execute mit Parameter action=’nativeAction‘ und einem JsonString(!) data = „[’success‘]“ auf. Data kann dafür verwendet werden Daten nach Java zu übergeben:
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
public class UploadImage extends Plugin {
public static final String NATIVE_ACTION_STRING="nativeAction";
public static final String SUCCESS_PARAMETER="success";
@Override
public PluginResult execute(String action, JSONArray data, String callbackId) {
Log.d("HelloPlugin", "Hello, this is a native function called from PhoneGap/Cordova!");
//only perform the action if it is the one that should be invoked
if (NATIVE_ACTION_STRING.equals(action)) {
String resultType = null;
try {
resultType = data.getString(0); }
catch (Exception ex) {
Log.d("HelloPlugin", ex.toString()); }
if (resultType.equals(SUCCESS_PARAMETER)) {
return new PluginResult(PluginResult.Status.OK, "Yay, Success!!!");
}
else {
return new PluginResult(PluginResult.Status.ERROR, "Oops, Error :(");
}
}
return null;
}
}
Außerdem muss das Plugin in die res/xml/config.xml eingetragen werden:
<plugin name="UploadImage" value="de.sv.foo.plugin.UploadImage"/>
Die Ausgabe sollte sein:
"SUCCESS: Yay, Success!!!"