1. A escolha do método de troca. Descrição da API.2. Implementação da API ao lado de 1C.3. BroadcastReceiver. Recebemos dados de código de barras no exemplo do ATOL Smart.Lite
4. OnKeyUp. Obtenha um código de barras em um scanner com emulação de tecladoNesta parte, eu gostaria de focar nos detalhes. Em todos os tutoriais que encontrei, as funções são simplesmente descritas e aproximadamente onde adicioná-las.
Vamos escrever nosso aplicativo que escuta a transmissão de mensagens e as exibe em uma janela pop-up. Crie um projeto com
Empty Activity
.
Package name
especifique "
com.domain.barcodeTest
" Um monte de livros didáticos. Agora, no projeto, criaremos um
package
. Para mim, chamei de utils, porque Não sei mais para onde levá-lo. Também não funciona com a rede, nem com o banco de dados. Não parece um modelo.
Portanto, assim.

A imagem destaca onde criar o pacote. Dentro dos
utils
crie uma classe
(Kotlin File/Class
). Selecionamos que é uma classe e chamamos de
CustomBroadcastReceiver
. Código de arquivo completo:
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) {
Criamos nossa classe para receber mensagens de transmissão, herdando tudo de BroadcastReceiver. Nele, redefinimos o comportamento da função para receber uma mensagem (
onReceive
). No nível superior "
com.domain.barcodeTest
", criaremos outros
models
pacotes e nele criaremos uma classe "
Barcode
". Código de arquivo completo:
barcode.kt package org.innova_it.mws.models data class Barcode( val type: String?, val value: String? )
Assim, criamos a classe Barcode e criamos um construtor para ela. Mesmo assim, Kotlin é bom. Agora podemos usá-lo livremente na classe
CustomBroadcastReceiver
, o erro deve desaparecer. Como resultado, temos a seguinte estrutura.

Nos pacotes, armazenamos objetos semelhantes. Se traduzido para 1C, no pacote de modelos, armazenamos uma descrição dos dados 1C. Diretórios, documentos com detalhes e objetos subordinados. Também armazenamos a descrição das tabelas do banco de dados e o formato para receber dados pela rede. Olhando para o futuro. Aqui está um exemplo típico do modelo da parte anterior da Nomenclatura. Não se aplica ao nosso projeto atual. Mas é mais fácil entender com um exemplo.
models / wares.kt data class PayLoadWares( val quantity: Int, val wares: List<Ware> )
Se você imaginar o projeto como uma estrutura 1C, cada pacote conterá classes: WaresModel (Modelo do diretório de mercadorias, WaresManager (Gerente do diretório de mercadorias), WaresObject (Objeto do diretório), WaresUI (Módulo do formulário), WaresUI (Módulo do formulário), WaresActivity (Form). diferente de 1C, podemos descrever propriedades comuns, métodos para todos os diretórios do modelo e herdá-los. No 1C, a plataforma faz isso e não precisamos pensar nisso.
Como descrever interfaces em 1C, eu nem sei. Isso deve ser ensinado antes da iluminação completa. Além disso, sem isso, será impossível.
Vamos voltar ao nosso aplicativo. A próxima coisa que precisamos fazer é assinar o aplicativo para os eventos que precisamos.
AndroidManifest.xml
dinamicamente, sem usar o
AndroidManifest.xml
.
Para fazer isso, precisamos adicionar uma variável e substituir dois procedimentos no
MainActivity
.
Adicionar variável
class MainActivity : AppCompatActivity() {
Inscreva-se nos eventos. Redefinir o comportamento de dois métodos no
MainActivity
override fun onResume() { super.onResume() registerReceiver( customBroadcastReceiver, IntentFilter ("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST") ) } override fun onStop() { super.onStop() unregisterReceiver(customBroadcastReceiver) }
Eu acho que tudo é bastante transparente aqui. Assinamos um aplicativo para receber mensagens com um filtro.No idioma 1C Quando uma mensagem é
(onReceive)
é
(onReceive)
, onde a Origem é
"com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"
. É assim que o utilitário interno para trabalhar com o scanner no ATOL Smart.Lite se autodenomina. E os dados que temos são
"EXTRA_BARCODE_DECODING_SYMBOLE"
- tipo "EXTRA_BARCODE_DECODING_SYMBOLE"
"EXTRA_BARCODE_DECODING_DATA"
- Os próprios dados
E, na verdade, a mensagem está sendo processada. Nós compilamos corrida. Nós verificamos. Tem uma pergunta? Pergunte nos comentários. Só isso. Agora somos desenvolvedores para Android. :)
Esta parte é adequada para obter o resultado desejado. Mas depois disso, você precisa aprender o básico de java. E só então o básico do kotlin.
PS Aqui eu gostaria de entrar em contato com os desenvolvedores do Android. Eu tenho uma situação estranha. Eu costumava assinar um aplicativo no OnCreate () e cancelar a inscrição no onStop (). Mas depois que o aplicativo foi para onPause () e, ao retomar onResume (), o aplicativo travou ao receber uma mensagem com erro. O que pode causar esse comportamento?