Если вы читаете это, я предполагаю, что вы в настоящее время имеете дело со многими неприятностями, возникающими при попытке работать с биксолонами в среде разработки, с которыми я столкнулся. Плохая документация, странное поведение apk и вводящая в заблуждение информация в Интернете могут показаться знакомыми. Я собираюсь разобрать проблемы, с которыми я столкнулся, и то, как я смог их решить.

Основы

Bixolon предоставляет собственный SDK для iOS, Android и Интернета соответственно. Они также производят различные типы принтеров, такие как кассовые терминалы (POS), мобильные принтеры и принтеры для этикеток. У каждого из них также есть разные SDK. Лучший способ найти нужный SDK:

  1. На принтере найдите имя устройства внизу или сбоку. Это может выглядеть примерно как «SRP-350plusIII».
  2. Перейдите на веб-сайт Bixolon и найдите страницу загрузки. После этого введите имя устройства, для которого вы собираетесь писать код.
  3. Прокрутите вниз и найдите раздел загрузок SDK. Выберите платформу, которую вы планируете использовать, и загрузите zip-файл. Для моего проекта мне нужно было использовать Android SDK. Важно отметить, что с флаттером вам придется загружать и поддерживать каждый отдельный SDK, если вы планируете запускать свое приложение на нескольких типах устройств.
  4. Разархивируйте файл.

Как использовать SDK

Внутри разархивированной папки будет pdf-файл с инструкциями по настройке SDK, и, похоже, это работает, если вы используете Eclipse, как это делается в руководстве. Сначала я следовал тем же шагам, воссозданным во Flutter, и не смог добиться успеха, поэтому вот как я заставил SDK работать.

Каналы Flutter Method

Flutter построен на основе языка Dart. Bixolon SDK написан не на Dart, но во Flutter есть полезная функция под названием «Каналы методов», которая позволяет нам интегрировать нативный код. Эта ссылка отлично объясняет, как они работают, и основы для начала работы:



Вы сможете выполнить шаги, описанные в этой статье, чтобы настроить базовую связь между кодом дротика и собственным кодом. Я рассмотрю возможность включения Android SDK, использующего java.

Добавление SDK в раздел Android

Внутри папки Bixolon, которая была загружена ранее, будет папка libs, содержащая все необходимое для начала использования Bixolon. В разделе вашего проекта для Android может быть папка libs. Если нет, создайте его. В эту папку вы собираетесь добавить файл bixolon_printer_V???.jar, папку jniLibs и папку libcommon_V???.jar, которая была включена в загрузку Bixolon. Вставив их, щелкните правой кнопкой мыши файлы jar и выберите «добавить как библиотеку». Вы должны иметь возможность сохранить указанный путь по умолчанию. Вам не нужно делать этот шаг для папки jniLibs.

Перейдите к app/src/main и также вставьте папку jniLibs внутрь этого каталога. Далее мы рассмотрим изменение атрибутов проекта, чтобы завершить предоставление доступа к SDK.

AndroidManifest.xml

Если вы планируете подключаться к вашему принтеру Bixolon через bluetooth, вам нужно будет добавить следующие строки перед разделом приложения:

<uses-permission android:name=”android.permission.BLUETOOTH”
android:maxSdkVersion=”30" />
<uses-permission android:name=”android.permission.BLUETOOTH_ADMIN”
android:maxSdkVersion=”30" />
<uses-permission android:name=”android.permission.BLUETOOTH_SCAN” />
<uses-permission android:name=”android.permission.BLUETOOTH_ADVERTISE” />
<uses-permission android:name=”android.permission.BLUETOOTH_CONNECT” />
<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION”/>

build.gradle (приложение/build.gradle)

Мне нужно было запустить мой код на современном планшете Android, что потребовало от меня добавления abiFilter в раздел defaultConfig.

ndk {
    abiFilters 'armeabi-v7a'
} 

Если после этого у вас возникнут проблемы с apk, попробуйте пересобрать apk. Это можно сделать через командную строку или нажав Build-›Flutter-›Build APK в верхней строке меню.

Вам также нужно будет включить зависимости, которые мы добавили ранее. Внизу файла добавьте следующие строки, если их еще нет:

dependencies {
implementation fileTree(dir: ‘libs’, include: [‘*.jar’, ‘*.so’])
implementation files(‘libs/bixolon_printer_V2.1.6.jar’)
implementation files(‘libs/libcommon_V1.1.6.jar’)
}

Убедитесь, что предыдущие изменения были внесены в файл build.gradle на уровне приложения. Уровень андроида менять не нужно.

Тестирование и запуск

Вернитесь к руководству Bixolon SDK, которое было включено в загруженный ранее zip-файл. Найдите основное действие, например распечатайте текст. Вы можете найти его в нижней части PDF-файла, но если не искать его. Мы можем использовать этот код для настройки Bixolon.

Перейдите к файлу MainActivity.java в Android-части приложения. Это то, что должны были включать мои операторы импорта:

import android.annotation.SuppressLint;
import android.app.Activity;
import android.bluetooth.BluetoothDevice;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
import jpos.JposException;
import jpos.config.JposEntry;
import jpos.POSPrinter;
import jpos.POSPrinterConst;
import com.bxl.config.editor.BXLConfigLoader;
import io.flutter.embedding.android.FlutterActivity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;

Вы должны были уже создать настройку канала метода ранее. Создайте метод onCreate. Здесь мы будем загружать настройки нашего принтера.

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BXLConfigLoader bxlConfigLoader = new BXLConfigLoader(getApplicationContext());
bxlConfigLoader.newFile();
try {
bxlConfigLoader.openFile();
}
catch (Exception e) {
Log.d("nathan", "Exception 0");
bxlConfigLoader.newFile();
}
try {
Log.d("nathan", logicalName);
bxlConfigLoader.addEntry(logicalName, BXLConfigLoader.DEVICE_CATEGORY_POS_PRINTER, BXLConfigLoader.PRODUCT_NAME_SRP_350PLUSIII, BXLConfigLoader.DEVICE_BUS_BLUETOOTH, address);
bxlConfigLoader.saveFile();
}
catch (Exception e) {
Log.d("nathan", e.toString());
}
}

Обратитесь к руководству Bixolon, если вы хотите узнать больше о том, как работает BXLConfig и какие параметры передавать. Используемый вами адрес будет MAC-адресом принтера. Если у вас возникли проблемы с его поиском, подключите принтер к компьютеру и запустите команду config в терминале, чтобы найти адреса всех подключенных bluetooth-устройств и запишите нужное. Важно иметь этот раздел в onCreate из-за того, как Flutter создает каналы методов.

Теперь вы можете создать метод для завершения простой печати. Этот метод следует вызывать из вашего класса configureFlutterEngine в файле MainActivity. Я включил пример ниже:

public void printOrder(String name, List<String> mods) {
Log.d(“nathan”, “starting connection process”);
try {
if(!openedPrinter) {
posPrinter = new POSPrinter(getApplicationContext());
Log.d(“nathan”, “log before print open”);
posPrinter.open(logicalName);
posPrinter.claim(10000);
posPrinter.setDeviceEnabled(true);
posPrinter.setAsyncMode(true);
openedPrinter = true;
}
//text print=
posPrinter.markFeed(0);
posPrinter.printNormal(POSPrinterConst.PTR_S_RECEIPT, name + “\n”);
posPrinter.printNormal(POSPrinterConst.PTR_S_RECEIPT, name + “\n”);
posPrinter.printNormal(POSPrinterConst.PTR_S_RECEIPT, name + “\n”);
posPrinter.printNormal(POSPrinterConst.PTR_S_RECEIPT, name + “\n”);
posPrinter.printNormal(POSPrinterConst.PTR_S_RECEIPT, name + “\n”);
for(int j = 0; j < mods.size(); j++) {
posPrinter.printNormal(POSPrinterConst.PTR_S_RECEIPT, “ “ + mods.get(j) + “\n”);
}
posPrinter.cutPaper(90);
}
catch (JposException e) {
Log.d(“nathan”, “encountered error 1”);
Log.d(“nathan”, e.toString());
}
catch (Exception e) {
Log.d(“nathan”, “encountered error 2”);
Log.d(“nathan”, e.toString());
}
}

Если все шаги были соблюдены, вы должны увидеть, как Bixolon отвечает и печатает нужный текст!

Другие примечания

  • Android Studio может пометить ваши нативные участки кода как заполненные с ошибкой. Чтобы исправить это, снова откройте раздел Android вашего кода в новом окне.
  • Если файлы apk не работают, попробуйте добавить дополнительные параметры в параметр abiFilters, который мы включили ранее.
  • Биксолон может быть болезненным, поэтому, если он вам помог, поздравляю. Если нет, бог скорости.