2016-01-03 11 views
10

Desidero che la maggior parte della mia app (voci di elenco, archiviazione, accesso, schermate ecc ...) gestite in cordova, perché è doloroso farlo nel flusso di lavoro nativo.Miscelazione di cordova e attività native in Android

Ma ho un'attività specifica (che ho già creato) che non può essere eseguita con cordova (almeno non abbastanza e abbastanza veloce). Come dovrei creare questa app?

  • AM Dovrei creare un plugin cordova che caricherà solo queste due attività ?
  • Devo generare un'app cordova tramite cli o devo incorporare cordova in un'unica attività?

Se c'è più materiale su questo mi piacerebbe sentirne parlare.

Grazie in anticipo.

risposta

7

Dipende dall'attività che hai creato.

Se la tua attività principale è lo schermo Cordova, e sarà a schermo intero, e un'azione sulla parte Cordova avvierà la tua attività nativa per un determinato compito, allora dovresti usare un plugin per questo, che lanci il tuo attività usando un intento e quando finisci con esso lo chiudi e torni all'attività Cordova, restituendo un valore o meno.

Se si desidera mescolare la vista Cordova con la visualizzazione nativa, in cui nessuno di essi è a schermo intero, è necessario passare all'inserimento di Cordova in un progetto nativo.

Se la tua attività sarà la tua attività principale, incorporare Cordova è l'unica opzione.

come da lei richiesto per gli esempi e non ci si pensa plugin reali non sono un buon esempio, io semplificare il plugin creation guide

Un plugin ha bisogno di un file plugin.xml che assomiglia a questo:

<?xml version="1.0" encoding="UTF-8"?> 
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 
     id="your-plugin-id" version="1.0.0"> 
    <name>pluginName</name> 
    <description>description of the plugin</description> 
    <license>License of the plugin</license> 
    <js-module src="www/pluginName.js" name="pluginName"> 
     <clobbers target="pluginName" /> 
    </js-module> 
    <platform name="android"> 
     <config-file target="res/xml/config.xml" parent="/*"> 
      <feature name="PluginName" > 
       <param name="android-package" value="your.plugin.package.pluginName"/> 
      </feature> 
     </config-file> 

     <source-file src="src/android/PluginName.java" target-dir="your/plugin/package/PluginName" /> 
    </platform> 
</plugin> 

Guardandolo, è possibile vedere che è necessaria anche una cartella www con un file pluginName.js e una cartella src/android con un file pluginName.java.

I pluginName.js dovrebbe essere qualcosa di simile:

function showNativeView() { 
    cordova.exec(successCallback, errorCallback, "PluginName", "showNativeView", [arguments]); 
} 

primo param è la funzione successCallback da chiamare quando la finitura plugin di esecuzione. Secondo param è la funzione errorCallback per chiamare se il plugin ha qualche problema Terzo param è il nome della classe java che chiamerai, deve corrispondere a quello sul plugin.xml Quarto param è l'azione da chiamare la classe java E quinta è una matrice o argomenti se si desidera inviare qualsiasi. Per eseguirlo, chiama showNativeView() da un clic del mouse o comunque desideri. Promemoria, questo è troppo semplificato, il modo corretto di farlo dovrebbe essere la creazione di uno spazio dei nomi per il plugin e l'aggiunta delle diverse funzioni ad esso, ma voglio mantenerlo semplice.

Infine il PluginName.java dovrebbe essere qualcosa di simile:

@Override 
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 
     if ("showNativeView".equals(action)) { 
      Intent yourIntent = new Intent(this.cordova.getActivity().getBaseContext(), YourActivityToLaunch.class); 
cordova.getActivity().startActivity(yourIntent); 
      callbackContext.success(); 
      return true; 
     } 
     return false; // Returning false results in a "MethodNotFound" error. 
    } 

Questo lancia un semplice intento che non restituisce nulla in cambio, se la vostra attività di ritorno qualcosa, allora è necessario utilizzare

this.cordova.startActivityForResult(this, yourIntent, REQUEST_CODE); 

E aggiungere il

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    String result = intent.getStringExtra("WHATEVER_THE_INTENT_RETURNS"), 
    this.callbackContext.success(result); 
} 

Si chiama il successo qui invece di farlo subito dopo aver avviato l'intento e restituire il valore restituito dall'attività. Dovresti anche controllare il REQUEST_CODE in modo che corrisponda a quello che hai usato per lanciare l'intento, il risultato dell'attività, ecc.

+0

Puoi mostrare alcuni esempi di codice? Il plugin per fotocamera – funerr

+0

avvia un intento https://github.com/apache/cordova-plugin-camera, anche il plugin inAppBrowser https://github.com/apache/cordova-plugin-inappbrowser, il plugin per scanner di codici a barre anche https: // github .com/PhoneGap/PhoneGap-plugin-Barcodescanner. Per quanto riguarda l'incorporamento della webview di Cordova, non ho esempi e la guida sul sito Cordova è terribilmente obsoleta. – jcesarmobile

+0

Intendevo aggiungere codice come: [pulsante cordova che apre un intento nativo] -> [codice nativo] + la struttura dell'app dei file. I link più possono essere 404 un giorno. – funerr

Problemi correlati