2013-09-04 5 views

risposta

11

È possibile creare un plug-in personalizzato per chiamare qualsiasi metodo dal lato nativo. Creare un file JavaScript separato, dire customplugin.js, e mettere questo in esso:

var CustomPlugin = {}; 

CustomPlugin.callNativeMethod = function() { 
    cordova.exec(null, null, "CustomPlugin", "callNativeMethod", []); 
}; 

ora sul lato nativo di Java, creare una nuova classe e il nome CustomPlugin.java, quindi aggiungere questo:

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(); 
    } 
} 

assicurarsi di mappare i plugin nel file config.xml aggiungendo questa linea:

... 
<feature name="CustomPlugin"> 
    <param name="android-package" value="com.yourpackage.CustomPlugin" /> 
</feature> 
... 

Ora per lanciare il plugin dal vostro index.html si può semplicemente chiamare il metodo JavaScript:

CustomPlugin.callNativeMethod(); 

L'utilizzo di questo metodo consente di impostare molti metodi personalizzati in modo conveniente. Per ulteriori informazioni, consultare la guida allo sviluppo del plugin PhoneGap here.

+0

Grazie @suprnova tua la risposta è utile forse funziona per la versione precedente ma ho notato che sto usando l'ultima versione di phonegap (3.0) e ho codificato questo, ma non funziona. Ho ricevuto questo errore exec() chiamata al plugin sconosciuto, ho trovato qualcosa di simile qui http://stackoverflow.com/questions/17974301/phonegap-3-plugin-exec-call-to-unknown-plugin – nramirez

+1

Hai ragione, questo non funzionerà con PhoneGap 3.0, ma penso che sia perché la mappatura dei plugin che ho usato nella risposta precedente è deprecata. Tuttavia, ho aggiornato la mia risposta con il mapping PhoneGap 3.0. In sostanza, l'elemento ' 'nel file config.xml è deprecato, è necessario utilizzare invece l'elemento' '. – kieranroneill

+0

Sì! Ci sto lavorando! Non appena avrò la soluzione a questa domanda, posterò la risposta! – nramirez

2

Dopo aver completato tutto dalla risposta di cui sopra, si dovrà anche aggiungere il plugin nella res/xml/config.xml per farlo funzionare

<plugin name="PluginName" value="com.namespace.PluginName"/> 

prima del tag </plugins>

Problemi correlati