capa ajust.jpg

Introdução

O posGo é um terminal de vendas móvel completo, em um único dispositivo estão a CPU, tela touch, impressora térmica e “maquininha” de cartão. Tudo isto em um equipamento de design prático, leve, tela de toque colorida e capacitiva de 5,5 polegadas, com display de alta resolução e multitouch para ser segurado com uma mão. Possui bateria interna que permite o funcionamento desligado da tomada e com conexão de rede sem fio para poder ser levado em qualquer lugar.

Opera com sistema Android, permitindo a utilização de aplicativos de vendas compatíveis. É perfeito para ser utilizado como terminal de vendas principal ou extensão de um terminal fixo.

O posGo é ideal para negócios com pouco espaço ou que exigem atendimento do cliente com mobilidade, acabando com as filas de caixa.

O cliente conta com recursos que inovam e ao mesmo tempo simplificam o atendimento:

  • Assinatura na tela;

  • Leitor 1D e 2D (QRCode);

  • GPS, 3G e Bluetooth;

  • Leitor de cartão por tarja magnética e chip;

  • NFC.

Especificações Técnicas

Processador

CPU de 4 núcleos + processador de alta segurança

Memória

FLASH 8GB, RAM 1GB esuporte para cartão microSD

Tela

sensível ao toque, tipo capacitivo, suporta e-assinatura

Display

5,5 polegadas, 720 x 1280

PINPAD

PINPAD integrado (Teclado virtual)

Impressora

Impressora térmica direta

Bobina de Papel

Diâmetro 40mm , largura 25mm

Leitor Magnético

1,2,3 tarjas bidirecionais

Comunicação

3G Netcom , WIFI e Bluetooth 4.1

Sistema Operacional

Android 5.1 lolipop

Leitores de Cartão

PSAM: 2

SIM: 1

SD: 1

NFC 13.56MHz, support ISO14443

Não é possível emular o PosGo no Android Studio, pois seu SDK tem dependências específicas do hardware!

Bibliotecas

Arquivo Descrição

nexgosdk-2.x.x.jar

Pacote Jar de interface da API

libemvjni.so

Biblioteca EMV

libsdkemvjni.so

Biblioteca EMV do SDK

libgencode.so

Biblioteca Encode

Como obtenho o SDK do posGo?

Baixe as bibliotecas acessando o sistema posGo, na página inicial vá em Acesso a Desenvolvedores e faça seu cadastro!

Requisitos Básicos do Sistema

Ambiente de Desenvolvimento: Android Studio 2.0 ou superior.

Sistema Operacional: Android 5.1.1 Lolipop.

Criando um projeto

Abra um novo projeto no Android Studio:

primeira tela.jpg
segunda tela.jpg
terceira tela.jpg
final.jpg
tela inicial.jpg

Na aba "1:Project" clique no nome do projeto e vá em "project":

abre projeto.jpg

Copie os arquivos da pasta SDK-N5_v2_04_2\Library:

arquivos.jpg

Vá em "App/libs" e cole os arquivos do SDK:

colar arquivos.jpg
ok colar arquivos.jpg

Agora os arquivos e bibliotecas necessárias para começar o desenvolvimento estão corretamente instalados na pasta libs:

lib arquivos.jpg

Para que as bibliotecas estejam disponíveis para o projeto, abra o arquivo Gradle Scripts/build.gradle (module:app) e insira a configuração abaixo:

sourceSets.main {

    jniLibs.srcDir 'libs'

    jni.srcDirs = [] //disable automatic ndk-build call
}

Essa instrução deve ser colocada logo após o parâmetro defaultConfig!

Seu arquivo ficará como na imagem abaixo, clique em Sync Now para sincronizar:

sourceSets.jpg

Exemplo de implementação

O objeto global que é utilizado para as classes referentes ao dispositivo é o DeviceEngine, e sua implementação é feita da seguinte forma dentro da classe:

private DeviceEngine deviceEngine = APIProxy.getDeviceEngine();

Mostrando a classe principal com uma implementação de impressão:

MainActivity.java
package com.example.jcbruno.teste_posgo_2;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.nexgo.oaf.apiv3.APIProxy;
import com.nexgo.oaf.apiv3.DeviceEngine;
import com.nexgo.oaf.apiv3.SdkResult;
import com.nexgo.oaf.apiv3.device.printer.AlignEnum;
import com.nexgo.oaf.apiv3.device.printer.BarcodeFormatEnum;
import com.nexgo.oaf.apiv3.device.printer.DotMatrixFontEnum;
import com.nexgo.oaf.apiv3.device.printer.FontEntity;
import com.nexgo.oaf.apiv3.device.printer.OnPrintListener;
import com.nexgo.oaf.apiv3.device.printer.Printer;

public class MainActivity extends AppCompatActivity {

    private DeviceEngine deviceEngine;
    private Printer printer;
    private final int FONT_SIZE_SMALL = 20; //32 colunas  de letras ou números
    private final int FONT_SIZE_NORMAL = 24; //27 colunas de letras ou números
    private final int FONT_SIZE_BIG = 28; //24 colunas de letras ou números

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        DeviceEngine deviceEngine = APIProxy.getDeviceEngine();
        printer = deviceEngine.getPrinter();

        Button btNFCe = (Button) findViewById( R.id.btNFCe );
        btNFCe.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imprimirNFCe();
            }
        } );

        Button btQrcode = (Button)findViewById( R.id.btQrcode );
        btQrcode.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imprimirQRCode();
            }
        } );

    }

    private void imprimirQRCode() {
        printer.initPrinter();
        printer.appendQRcode(getString(R.string.printQrcode),300,AlignEnum.CENTER);
        //printer.appendPrnStr( "QR Code de NFC-e",FONT_SIZE_NORMAL,AlignEnum.CENTER,false);
        printer.startPrint( true, new OnPrintListener() {
            @Override
            public void onPrintResult(final int retCode) {
                runOnUiThread( new Runnable() {
                    @Override
                    public void run() {
                        switch (retCode){
                            case SdkResult.Success:
                                Toast.makeText( MainActivity.this,"Impresso com sucesso",Toast.LENGTH_SHORT ).show();
                                break;
                            case SdkResult.Printer_AddImg_Fail:
                                Toast.makeText( MainActivity.this,"Falha na impressão",Toast.LENGTH_SHORT ).show();
                                break;
                            default:
                                Toast.makeText( MainActivity.this,"Erro desconhecido",Toast.LENGTH_SHORT ).show();
                        }
                    }
                } );
            }
        } );
    }

    private void imprimirNFCe() {
        printer.initPrinter();
        printer.setLetterSpacing( 5 );
        Bitmap bitmap = BitmapFactory.decodeResource( getResources(),R.drawable.logo );
        printer.appendImage( bitmap, AlignEnum.CENTER );
        printer.appendPrnStr( "Bematech Hardware", FONT_SIZE_NORMAL,AlignEnum.CENTER,false  );
        printer.appendPrnStr( "Av. Comendador Franco, 1341 - Jardim Botânico", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "Bematech Hardware", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "CNPJ: 123.456.789/00001-00", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "__________________________________", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "Desc         Qtd   Vlr    Un     Tot ", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "_____________________________", FONT_SIZE_BIG,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "Sabão em pó 1 3,44  1  3,44", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "_____________________________", FONT_SIZE_BIG,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "Valor Total            3,44", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "Pagamento              4,00", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "Troco                  0,56", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "_____________________________", FONT_SIZE_BIG,AlignEnum.LEFT,false  );
        printer.appendPrnStr( "Informações Adicionais", FONT_SIZE_NORMAL,AlignEnum.CENTER,false  );
        printer.appendPrnStr( "Consulta chave de acesso", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );
        printer.appendBarcode( "1234567890",50,0,2, BarcodeFormatEnum.CODE_128,AlignEnum.CENTER );
        printer.appendQRcode( "teste qrcode",200,AlignEnum.CENTER );
        printer.appendPrnStr( "Consumidor Julio Cesar Bruno",FONT_SIZE_NORMAL,AlignEnum.LEFT,false );
        printer.appendPrnStr( "", FONT_SIZE_NORMAL,AlignEnum.LEFT,false  );

        printer.startPrint( true, new OnPrintListener() {
            @Override
            public void onPrintResult(final int retCode) {
                runOnUiThread( new Runnable() {
                    @Override
                    public void run() {
                        switch (retCode){
                            case SdkResult.Success:
                                Toast.makeText( MainActivity.this,"Impresso com sucesso",Toast.LENGTH_SHORT ).show();
                                break;
                            case SdkResult.Printer_Print_Fail:
                                Toast.makeText( MainActivity.this,"Falha na impressão",Toast.LENGTH_SHORT ).show();
                                break;
                            case SdkResult.Printer_PaperLack:
                                Toast.makeText( MainActivity.this,"Sem papel",Toast.LENGTH_SHORT ).show();
                                break;
                            case SdkResult.Printer_UnFinished:
                                Toast.makeText( MainActivity.this,"Impressão não terminou",Toast.LENGTH_SHORT ).show();
                                break;
                            case SdkResult.Printer_TooHot:
                                Toast.makeText( MainActivity.this,"Superaquecimento da impressora!",Toast.LENGTH_SHORT ).show();
                                break;
                            default:
                                Toast.makeText( MainActivity.this,"Erro desconhecido",Toast.LENGTH_SHORT ).show();
                        }

                    }
                } );

            }
        } );

    }
}

Para realizar a impressão do QR Code e do código de barras, é necessário inserir a tag abaixo no arquivo AndroidManifest.xml!

<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Ficará como no exemplo abaixo:

manifest.jpg

Essa é a tela do aplicativo de exemplo citado acima:

tela exemplo.jpg

Considerações Finais

Este manual foi elaborado para inicialização do desenvolvimento para o PosGo, facilitando a implementação. Qualquer divergência ou informação vista como incorreta, favor entrar em contato com nosso suporte. Esse material tem fins de aprendizado e seu uso é livre.

Suporte

Chat Online - bematechpartners.com.br

Atendimento ao desenvolvedor - 0800-6447277