1. Die Wahl der Austauschmethode. API-Beschreibung.2. Implementierung der API auf der Seite von 1C.3. BroadcastReceiver. Wir erhalten Barcode-Daten am Beispiel von ATOL Smart.Lite
4. OnKeyUp. Holen Sie sich einen Barcode von einem Scanner mit TastaturemulationIn diesem Teil möchte ich mich auf die Details konzentrieren. In allen Tutorials, auf die ich gestoßen bin, werden die Funktionen einfach beschrieben und ungefähr, wo sie hinzugefügt werden sollen.
Schreiben wir unsere Anwendung, die Nachrichten abhört und in einem Popup-Fenster anzeigt. Erstellen Sie ein Projekt mit
Empty Activity
.
com.domain.barcodeTest
"
com.domain.barcodeTest
" angeben Eine Reihe von Lehrbüchern. Jetzt im Projekt werden wir ein
package
erstellen. Für mich selbst nannte ich es utils, weil Ich weiß nicht, wohin ich es sonst bringen soll. Es funktioniert nicht mit dem Netzwerk, auch nicht mit der Datenbank. Es sieht nicht wie ein Modell aus.
Deshalb so.

Das Bild zeigt, wo das Paket erstellt werden soll. Erstellen Sie in
utils
eine Klasse
(Kotlin File/Class
). Wir wählen aus, dass es sich um eine Klasse handelt, und nennen sie
CustomBroadcastReceiver
. Vollständiger Dateicode:
CustomBroadcastReceiver.kt package com.domain.barcodeTest.utils import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.widget.Toast class CustomBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) {
Wir haben unsere Klasse für den Empfang von Broadcast-Nachrichten erstellt und alles von BroadcastReceiver geerbt. Darin haben wir das Verhalten der Funktion zum Empfangen einer Nachricht neu definiert (
onReceive
). Auf der obersten Ebene "
com.domain.barcodeTest
" werden wir ein weiteres
com.domain.barcodeTest
erstellen und darin eine Klasse "
Barcode
" erstellen. Vollständiger Dateicode:
barcode.kt package org.innova_it.mws.models data class Barcode( val type: String?, val value: String? )
Daher haben wir die Barcode-Klasse erstellt und einen Konstruktor dafür erstellt. Trotzdem ist Kotlin gut. Jetzt können wir es frei in der
CustomBroadcastReceiver
Klasse verwenden, der Fehler sollte verschwinden. Als Ergebnis haben wir die folgende Struktur.

In Paketen speichern wir ähnliche Objekte. Wenn in 1C übersetzt, speichern wir im Modellpaket eine Beschreibung der 1C-Daten. Verzeichnisse, Dokumente mit Details und untergeordnete Objekte. Wir speichern auch die Beschreibung der Datenbanktabellen und das Format für den Empfang von Daten über das Netzwerk. Vorausschauend. Hier ist ein typisches Beispiel des Modells aus dem vorherigen Teil für die Nomenklatur. Dies gilt nicht für unser aktuelles Projekt. Mit einem Beispiel ist es jedoch einfacher zu verstehen.
models / wares.kt data class PayLoadWares( val quantity: Int, val wares: List<Ware> )
Wenn wir uns das Projekt als 1C-Struktur vorstellen, würde jedes Paket Klassen enthalten: WaresModel (Modell des Warenverzeichnisses, WaresManager (Manager des Warenverzeichnisses), WaresObject (Objekt des Verzeichnisses), WaresUI (Modul des Formulars), WaresActivity (Form). Aber in Im Gegensatz zu 1C können wir gemeinsame Eigenschaften und Methoden für alle Verzeichnisse im Modell beschreiben und dann von diesen erben. In 1C erledigt die Plattform dies und wir müssen nicht darüber nachdenken.
Wie man Schnittstellen in 1C beschreibt, weiß ich nicht einmal. Dies muss vor der vollständigen Erleuchtung gelehrt werden. Ohne dies wird es unmöglich sein.
Kehren wir zu unserer Anwendung zurück. Als nächstes müssen wir den Antrag für die von uns benötigten Ereignisse unterschreiben. Wir werden es dynamisch signieren, ohne
AndroidManifest.xml
.
Dazu müssen wir eine Variable hinzufügen und zwei Prozeduren in
MainActivity
.
Variable hinzufügen
class MainActivity : AppCompatActivity() {
Abonnieren Sie die Veranstaltungen. Definieren Sie das Verhalten zweier Methoden in
MainActivity
override fun onResume() { super.onResume() registerReceiver( customBroadcastReceiver, IntentFilter ("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST") ) } override fun onStop() { super.onStop() unregisterReceiver(customBroadcastReceiver) }
Ich denke hier ist alles ziemlich transparent. Wir signieren eine Anwendung zum Empfangen von Nachrichten mit einem Filter. In 1C-Sprache Wenn eine Nachricht
(onReceive)
, wobei die Quelle
"com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"
. So ruft sich das interne Dienstprogramm für die Arbeit mit dem Scanner unter ATOL Smart.Lite auf. Und die Daten, die wir haben, sind
"EXTRA_BARCODE_DECODING_SYMBOLE"
- "EXTRA_BARCODE_DECODING_SYMBOLE"
Typ"EXTRA_BARCODE_DECODING_DATA"
- Die Daten selbst
Und tatsächlich wird die Nachricht verarbeitet. Wir kompilieren run. Wir prüfen. Haben Sie eine Frage? Fragen Sie in den Kommentaren. Das ist alles. Jetzt sind wir Entwickler für Android. :)
Dieser Teil ist geeignet, um das gewünschte Ergebnis zu erzielen. Aber danach müssen Sie die Grundlagen von Java lernen. Und erst dann die Grundlagen von Kotlin.
PS Hier möchte ich die Android-Entwickler kontaktieren. Ich habe eine seltsame Situation. Ich habe eine Anwendung in OnCreate () signiert und mich in onStop () abgemeldet. Nachdem die Anwendung zu onPause () gewechselt war und onResume () fortgesetzt wurde, stürzte die Anwendung ab, wenn eine Nachricht mit einem Fehler empfangen wurde. Was kann dieses Verhalten verursachen?