Ich glaube, dass es möglich ist, Java-Methoden aus (PhoneGap) Javascript aufzurufen.
Weiß jemand wie man das macht ?? (Ich weiß, wie es geht, indem ich den Quellcode von PhoneGap ändere, aber das würde ich vermeiden.)
Ich habe es endlich geschafft.
Erstellen Sie eine Klasse mit Methoden, die Sie verwenden möchten:
public class MyClass {
private WebView mAppView;
private DroidGap mGap;
public MyClass(DroidGap gap, WebView view)
{
mAppView = view;
mGap = gap;
}
public String getTelephoneNumber(){
TelephonyManager tm =
(TelephonyManager) mGap.getSystemService(Context.TELEPHONY_SERVICE);
String number = tm.getLine1Number();
return number;
}
}
Fügen Sie in Ihrer Hauptaktivität eine Javascript-Schnittstelle für diese Klasse hinzu:
public class Main extends DroidGap
{
private MyClass mc;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.init();
mc = new MyClass(this, appView);
appView.addJavascriptInterface(mc, "MyCls");
super.loadUrl(getString(R.string.url));
}
}
Im Javascript-Aufruffenster.MyCls-Methoden:
<script>
$(function(){
$("#phone").text("My telephone number is: " +
window.MyCls.getTelephoneNumber());
});
</script>
Hinweis:
Fügen Sie, wie im Kommentar erwähnt, für Android Version 4.2 und höher @JavascriptInterface
die Methode hinzu, auf die Sie über Ihre HTML-Seite zugreifen möchten. Referenz .
addJavaScriptInterface(mc, "MyCls")
Ohne Lückeinit()
kann die App beschädigt werden. Fügen Sie sie bessersuper.init()
vorher hinzuaddJavascriptInterface()
quelle
PhoneGap hat eine anständige Plugin-API. Sie würden das Plugin in Java schreiben, indem Sie die IPlugin-Schnittstelle implementieren. Der größte Teil der Magie steckt in der Funktion execute ().
Der beste Weg, um mit dem Schreiben eines Plugins zu beginnen, besteht darin, zuerst die Javascript-API zu schreiben. Sie beginnen normalerweise mit dem Schreiben einer benutzerdefinierten Javascript-Klasse. In jeder Methode der Javascript-Klasse werden die Variablen gemarshallt und das Plugin aufgerufen, das Sie mit der Phonegap.exec () -Methode entwickelt haben. Hier ist die Methodensignatur als Referenz.
Sie müssen auch das Plugin registrieren. Dazu fügen Sie den Registrierungscode unten in Ihrer benutzerdefinierten Javascript-Bibliothek hinzu.
Im folgenden Beispiel hat der Autor eine Javascript-BarcodeScanner-Klasse definiert und mit der Methode addConstructor registriert.
Im addConstructor werden zwei Schritte ausgeführt:
Erstellen Sie eine neue Instanz von BarcodeScanner in Javascript und registrieren Sie sie. Dies ist in Javascript als window.plugins.barcodeScanner zugänglich
Registriert die benutzerdefinierte Plugin-Klasse mit einem Dienstnamen. Dieser Dienstname wird als erstes Argument an PhoneGap.exec übergeben, damit PhoneGap die Java-Plugin-Klasse instanziieren und die Methode execute () darauf aufrufen kann.
Beispielregistrierungscode:
quelle
eine einfachere Form:
quelle
Wenn jemand mit dem obigen Code eine nullPointer-Ausnahme erhält, führen Sie zuerst super.oncreate () und dann super..init () aus.
Ich habe diese Lösung hier gefunden: Phonegap Google Group
Vielen Dank an @ zorglub76 für die Lösung ....
quelle
Die Kommunikation von JavaScript zu Native wird durch Überschreiben der JavaScript-Eingabeaufforderungsfunktion im nativen Android-Code erreicht. Die übergebene Nachricht ähnelt der in iOS verwendeten. Früher haben wir WebView.addJavascriptInterface verwendet, um Java-Objekte direkt zur JavaScript-Sandbox hinzuzufügen. Dies führte jedoch dazu, dass einige Geräte mit Android 2.3 abstürzten. Um JavaScript von nativ aufzurufen, verwenden wir derzeit WebView.loadUrl (”javascript:…”), aber das hat einige Probleme, so dass wir bald eine Java-Nachrichtenwarteschlange abfragen, die einen lokalen HTTP-Server über eine langlebige XHR-Verbindung aufruft.
Beschreibung von hier
quelle