1. Pilihan metode pertukaran. Deskripsi API.2. Implementasi API di sisi 1C.3. BroadcastReceiver. Kami menerima data barcode pada contoh ATOL Smart.Lite
4. OnKeyUp. Dapatkan kode batang dari pemindai dengan emulasi keyboardPada bagian ini, saya ingin fokus pada detail. Dalam semua tutorial yang saya temui, fungsi-fungsinya dijelaskan dan kira-kira di mana menambahkannya.
Mari kita menulis aplikasi kita yang mendengarkan pesan siaran dan menampilkannya di jendela sembulan. Buat proyek dengan
Empty Activity
.
Package name
tentukan "
com.domain.barcodeTest
" Sekelompok buku teks. Sekarang dalam proyek kita akan membuat
package
. Bagi saya sendiri, saya menyebutnya utils, karena Saya tidak tahu ke mana lagi harus membawanya. Itu tidak bekerja dengan jaringan, dengan database juga. Itu tidak terlihat seperti model.
Karenanya, seperti ini.

Gambar menyoroti di mana membuat paket. Di dalam
utils
buat kelas
(Kotlin File/Class
). Kami memilih bahwa itu adalah kelas, dan kami menyebutnya
CustomBroadcastReceiver
. Kode file lengkap:
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) {
Kami menciptakan kelas kami untuk menerima pesan siaran, mewarisi segalanya dari BroadcastReceiver. Di dalamnya, kami mendefinisikan kembali perilaku fungsi untuk menerima pesan (
onReceive
). Di tingkat atas "
com.domain.barcodeTest
" kita akan membuat satu lagi
models
paket, dan di dalamnya kita akan membuat kelas "
Barcode
". Kode file lengkap:
barcode.kt package org.innova_it.mws.models data class Barcode( val type: String?, val value: String? )
Jadi, kami membuat kelas Barcode dan membuat konstruktor untuknya. Semua sama, Kotlin baik. Sekarang kita dapat dengan bebas menggunakannya di kelas
CustomBroadcastReceiver
, kesalahan seharusnya hilang. Sebagai hasilnya, kami memiliki struktur berikut.

Dalam paket kami menyimpan objek serupa. Jika diterjemahkan ke dalam 1C, maka dalam paket model kami menyimpan deskripsi data 1C. Direktori, dokumen dengan detail dan objek bawahan. Kami juga menyimpan deskripsi tabel database dan format untuk menerima data melalui jaringan. Ke depan. Berikut adalah contoh khas model dari bagian sebelumnya untuk Nomenklatur. Itu tidak berlaku untuk proyek kami saat ini. Tetapi lebih mudah dipahami dengan sebuah contoh.
models / wares.kt data class PayLoadWares( val quantity: Int, val wares: List<Ware> )
Jika kita membayangkan proyek sebagai struktur 1C, maka setiap paket akan berisi kelas: WaresModel (Model direktori barang, WaresManager (Manajer direktori barang), WaresObject (Objek direktori), WaresUI (Modul formulir), WaresActivity (Formulir). tidak seperti 1C, kita dapat menggambarkan properti umum, metode untuk semua direktori dalam model, dan kemudian mewarisi darinya. Pada 1C, platform melakukan ini dan kita tidak perlu memikirkannya.
Bagaimana cara menggambarkan antarmuka dalam 1C, saya bahkan tidak tahu. Ini harus diajarkan sebelum pencerahan penuh. Lebih jauh tanpa ini tidak mungkin.
Mari kita kembali ke aplikasi kita. Hal berikutnya yang perlu kita lakukan adalah menandatangani aplikasi untuk acara yang kita butuhkan. Kami akan menandatanganinya secara dinamis, tanpa menggunakan
AndroidManifest.xml
.
Untuk melakukan ini, kita perlu menambahkan variabel dan mengganti dua prosedur di
MainActivity
.
Tambahkan variabel
class MainActivity : AppCompatActivity() {
Berlangganan acara. Mendefinisikan kembali perilaku dua metode di
MainActivity
override fun onResume() { super.onResume() registerReceiver( customBroadcastReceiver, IntentFilter ("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST") ) } override fun onStop() { super.onStop() unregisterReceiver(customBroadcastReceiver) }
Saya pikir semuanya cukup transparan di sini. Kami menandatangani aplikasi untuk menerima pesan dengan filter. Dalam bahasa 1C Saat pesan
(onReceive)
, di mana Sumbernya adalah
"com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"
. Ini adalah bagaimana utilitas internal untuk bekerja dengan pemindai pada ATOL Smart.Lite menyebut dirinya. Dan data yang kami miliki adalah
"EXTRA_BARCODE_DECODING_SYMBOLE"
- tipe "EXTRA_BARCODE_DECODING_SYMBOLE"
"EXTRA_BARCODE_DECODING_DATA"
- Data itu sendiri
Dan sebenarnya pesan tersebut sedang diproses. Kami mengkompilasi run. Kami periksa. Punya pertanyaan? Tanyakan di komentar. Itu saja. Sekarang kami adalah pengembang untuk Android. :)
Bagian ini cocok untuk mendapatkan hasil yang diinginkan. Tetapi setelah itu, Anda harus pergi dan mempelajari dasar-dasar java. Dan hanya itulah dasar-dasar kotlin.
PS Di sini saya ingin menghubungi pengembang Android. Saya memiliki situasi yang aneh. Saya dulu menandatangani aplikasi di OnCreate (), dan berhenti berlangganan di onStop (). Tetapi setelah aplikasi pergi ke onPause (), dan ketika melanjutkan onResume (), aplikasi macet ketika menerima pesan dengan kesalahan. Apa yang bisa menyebabkan perilaku ini?