Integrácia ANDROID cez LDM
Pre podporu rýchlej a jednoduchej integrácie sme pripravili základné príklady ako sa pripojiť k službe a vykonať jednoduchý Pegas Script.
Projekt pre AdnroidStudio je k dispozícii na:
Link
Projekt obsahuje knižnice so všetkými potrebnými funkciami pre spracovanie skriptu v zložke app/libs.
Popis
V AndroidManifest.xml je potrebné vykonať nasledovné úpravy
Pridať oprávnenie:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
Od Androidu 11 je potrebné ďalej definovať:
<queries>
<package android:name="sk.epopay.pos.printer" />
<package android:name="sk.singularisdev.androidekasa.client" />
</queries>
Do build.gradle pridať:
implementation (files("libs/LdmClient-release.aar"))
Príklad AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.LdmClientExample"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<queries>
<package android:name="sk.epopay.pos.printer" />
<package android:name="sk.singularisdev.androidekasa.client" />
</queries>
</manifest>
Inicializácia pripojenia
Pozor: Je potrebné vykonávať metódy pre pripojenie, vykonanie skriptu mimo UI vlákna! V prípade volaní na UI vlákne dôjde k jeho zablokovaniu. Toto je ošetrené priamo v knžnici a bude vyvolaná výnimka UiThreadViolationException.
private LdmClient ldmClient;
// ...
@Override
protected void onCreate(Bundle savedInstanceState)
{
// ...
ldmClient = new LdmClient(getApplicationContext());
// ...
}
Pripojenie k službe LDM
private class ConnectAsyncTask extends AsyncTask<Void, Void, String>
{
protected String doInBackground(Void... params) {
try {
boolean connected = ldmClient.connect();
return connected ? "connected" : "not connected - call again";
}
catch (UiThreadViolationException e)
{
return "connect called from UI thread - please use non-ui thread!";
}
catch (ServiceDoesNotExistException e)
{
return "LDM service does not exists on this device!";
}
}
@Override
protected void onPostExecute(String message)
{
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
if (message.equals( "connected"))
{
testScriptButton.setVisibility(View.VISIBLE);
reconnectButton.setVisibility(View.GONE);
}
else
{
testScriptButton.setVisibility(View.GONE);
reconnectButton.setVisibility(View.VISIBLE);
}
}
}
Riešenie chybových výnimiek
Výnimka | Riešenie |
|---|
UiThreadViolationException | Využiť samostatné vlákno pre pripojenie k službe |
ServiceDoesNotExistException | Služba neexistuje, overiť existenciu potrebnej aplikácie - eKasaClient alebo EpoPay POS Service |
Vykonanie skriptu
private class TestSciptAsyncTask extends AsyncTask<Void, Void, String>
{
@Override
protected String doInBackground(Void... params) {
try {
String result = ldmClient.processFmScript("gettVariable:B51\r\n");
return result;
}
catch (LdmCommunicationException e)
{
e.printStackTrace();
return "LdmCommunicationException";
}
catch (ScriptProcessingException e)
{
e.printStackTrace();
return "ScriptProcessingException";
}
catch (ScriptParsingException e)
{
e.printStackTrace();
return "ScriptParsingException - unknown command, wrong format etc.";
}
catch (LdmIsNotInitialized e)
{
e.printStackTrace();
return "LDM is not initialized";
}
catch (UiThreadViolationException e)
{
return "connect called from UI thread - please use non-ui thread!";
}
catch (ClientIsNotInitializedException e)
{
return "LDM client is not initialized - call connect again";
}
catch (LdmException e)
{
e.printStackTrace();
return "internal error - log this exception for support";
}
}
@Override
protected void onPostExecute(String message)
{
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
}
}
Riešenie chybových výnimiek
Výnimka | Riešenie |
|---|
LdmCommunicationException | Chyba pri komunikácií so službou, zavolať disconnect a znova connect. V prípade oprakovanie chyby kontaktovať podporu |
ScriptProcessingException | Služba neexistuje, overiť existenciu potrebnej aplikácie - eKasaClient alebo EpoPay POS Service |
ScriptParsingException | Chyba pri spracovaní skriptu, neznámy príkaz, chybný zápis parametrov a pod. |
LdmIsNotInitialized | Služba LDM nie je inicializovaná. Je potrrebné inicializovať buď cez GUI alebo EpoPay Launcher OnBoarding |
UiThreadViolationException | Využiť samostatné vlákno pre pripojenie k službe |
ClientIsNotInitializedException | Služba nie je pripojená. Je potrebné zavolať metódu connect |
LdmException | Interná chyba, ktorá by nemala nastať, zalogovať výninmku a kontaktovať podporu |
Last modified: 23 februára 2026