Możesz utworzyć niestandardową wtyczkę, aby wywołać dowolną metodę z natywnej strony. Utworzyć oddzielny plik JavaScript, powiedzmy customplugin.js i umieścić to do niego:
var CustomPlugin = {};
CustomPlugin.callNativeMethod = function() {
cordova.exec(null, null, "CustomPlugin", "callNativeMethod", []);
};
Teraz na rodzimej strony Java, należy utworzyć nową klasę i nazwij go CustomPlugin.java, następnie dodać to:
package com.yourpackage;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaInterface;
import org.apache.cordova.api.CordovaPlugin;
import com.yourpackage.MainActivity;
public class CustomPlugin extends CordovaPlugin
{
private static final String TAG = "CustomPlugin";
private CallbackContext callbackContext = null;
private MainActivity activity = null;
/**
* Override the plugin initialise method and set the Activity as an
* instance variable.
*/
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView)
{
super.initialize(cordova, webView);
// Set the Activity.
this.activity = (MainActivity) cordova.getActivity();
}
/**
* Here you can delegate any JavaScript methods. The "action" argument will contain the
* name of the delegated method and the "args" will contain any arguments passed from the
* JavaScript method.
*/
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException
{
this.callbackContext = callbackContext;
Log.d(TAG, callbackContext.getCallbackId() + ": " + action);
if (action.equals("callNativeMethod"))
{
this.callNativeMethod();
}
else
{
return false;
}
return true;
}
private void callNativeMethod()
{
// Here we simply call the method from the Activity.
this.activity.callActivityMethod();
}
}
Upewnij się zmapować wtyczek w pliku config.xml dodając ten wiersz:
...
<feature name="CustomPlugin">
<param name="android-package" value="com.yourpackage.CustomPlugin" />
</feature>
...
teraz, aby zadzwonić do wtyczki z index.html można po prostu zadzwonić do metody JavaScript:
CustomPlugin.callNativeMethod();
Za pomocą tej metody można wygodnie skonfigurować wiele niestandardowych metod. Aby uzyskać więcej informacji, zapoznaj się z przewodnikiem rozwoju wtyczki PhoneGap here.
Dzięki @suprnova swoje Odpowiedź jest pomocna, może działa dla poprzedniej wersji, ale zauważam, że używam ostatniej wersji phonegapa (3.0) i zakodowałem to, ale nie działa. Mam ten błąd wywołania exec() do nieznanej wtyczki, znalazłem coś podobnego tutaj http://stackoverflow.com/questions/17974301/phonegap-3-plugin-exec-call-to-unknown-plugin – nramirez
Masz rację, to nie zadziała z PhoneGap 3.0, ale myślę, że dzieje się tak dlatego, że mapowanie wtyczek, którego użyłem w poprzedniej odpowiedzi, jest przestarzałe. Jednak zaktualizowałem swoją odpowiedź za pomocą mapowania PhoneGap 3.0. Zasadniczo, element '' w pliku config.xml jest przestarzały, należy zamiast tego użyć elementu ''. –
kieranroneill
Tak! Już się za to zabieram! Jak tylko dostanę rozwiązanie tego pytania, opublikuję odpowiedź! – nramirez