2016-01-03 14 views
10

Chcę, aby większość mojej aplikacji (elementy listy, przechowywanie, podpis, ekrany itp.) Była obsługiwana w cordova, ponieważ jest to po prostu bolesne w natywnym przepływie pracy.Mieszanie cordova i natywne działania w Androidzie

Ale mam specyficzną działalność (którą już stworzyłem), której nie można zrobić z cordova (przynajmniej nie ładnie i szybko). Jak utworzyć tę aplikację?

  • AM Mam utworzyć wtyczkę cordova, która załaduje tylko te dwa działania: ?
  • Czy powinienem wygenerować app cordova za pośrednictwem cli, czy też powinienem osadzić cordova w jednym działaniu?

Jeśli jest więcej materiałów na ten temat, bardzo chciałbym o tym usłyszeć.

Z góry dziękuję.

Odpowiedz

7

To zależy od aktywności, którą utworzyłeś.

Jeśli Twoim głównym zajęciem jest ekran Cordova, a będzie to pełny ekran, a pewne działanie w części Cordova uruchomi twoją natywną aktywność dla określonego zadania, powinieneś użyć wtyczki do tego, która uruchomi twoją aktywność przy użyciu intencji, a kiedy skończysz, zamknij ją i wróć do działania w Cordova, zwracając wartość lub nie.

Jeśli chcesz wymieszać widok Cordova z widokiem natywnym, gdzie żaden z nich nie jest w trybie pełnoekranowym, powinieneś użyć osadzania Cordova w projekcie natywnym.

Jeśli twoja aktywność będzie twoją główną działalnością, to umieszczenie Cordova jest twoją jedyną opcją.

Ponieważ poprosiłeś o przykłady i nie sądzę prawdziwe wtyczki nie są dobrym przykładem, będę uprościć plugin creation guide

Wtyczka potrzebuje plik plugin.xml, który wygląda tak:

<?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> 

Patrząc na niego, widzisz, że potrzebujesz również folderu www z plikiem pluginName.js, a także folderu src/android z plikiem pluginName.java.

W pluginName.js powinno być coś takiego:

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

Pierwszy param jest funkcja successCallback zadzwonić, gdy wykończenie wtyczki wykonywania. Drugim parametrem jest funkcja błędu wywołania do wywołania, jeśli wtyczka miała jakikolwiek problem. Trzeci parametr to nazwa klasy języka Java, którą wywołasz, musi pasować do tej w plugin.xml. Czwarty parametr jest akcją wywołania klasa java A piąta to tablica lub argumenty, jeśli chcesz je wysłać. Aby wykonać, wywołaj showNativeView() z kliknięcia przycisku lub jak chcesz. Przypomnienie, jest to nadmiernie uproszczone, właściwym sposobem na to powinno być utworzenie przestrzeni nazw dla wtyczki i dodanie do niej różnych funkcji, ale chcę zachować prostotę.

Wreszcie nazwa wtyczki.java powinno być coś takiego:

@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. 
    } 

ten uruchamia prosty intencję, że nic nie wrócić z powrotem, jeśli aktywność powrót coś wtedy trzeba użyć

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

i dodać

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

Wywołujesz sukces tutaj, zamiast robić to zaraz po uruchomieniu intencji, i zwracasz wartość, którą zwróciło działanie. Powinieneś również sprawdzić REQUEST_CODE, aby pasował do tego, którego użyłeś do uruchomienia intencji, wyniku działania, itp.

+0

Czy możesz pokazać przykłady kodu? – funerr

+0

wtyczka kamery uruchamia intencję https://github.com/apache/cordova-plugin-camera, wtyczka InAppBrowser też https://github.com/apache/cordova-plugin-inappbrowser, wtyczka skanera kodów kreskowych również https: // github .com/phonegap/phonegap-plugin-barcodescanner. O osadzaniu strony internetowej Cordova, nie mam przykładów, a przewodnik na stronie Cordova jest strasznie nieaktualny. – jcesarmobile

+0

Chciałem dodać kod, na przykład: [przycisk cordova, który otwiera zamiar na natywny] -> [kod natywny] + struktura aplikacji plików. Dodatkowe linki mogą być 404 dniowe. – funerr