Device Manager (далі ДМ) на android для здійснення фіскалізації має працювати у фоновому режимі, інакше запити від POS-системи не будуть надходити в додаток і відповідно не буде проходити фіскалізація.
Для того щоб запустити застосунок користувачу потрібно його окремо відкривати після кожного перезапуску пристрою або ручної зупинки
Можна виконати запуск ДМ з POS-системи автоматично при її старті для того щоб не потрібно було запускати його окремо.
Для забезпечення біндінгу необхідно щоб пакет ДМ-а був доданий в дозволені згідно з документацією Android.
<queries>
<package android:name="com.palmapos.mobile.dm.vchasno" />
</queries>
Код біндінгу наступний:
ServiceConnection dmServiceConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.w("app", "connected");
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
Log.w("app", "disconnected");
}
@Override
public void onNullBinding(ComponentName name) {
Log.w("app", "null binding");
}
@Override
public void onBindingDied(ComponentName name) {
Log.w("app", "binding died");
}
};
Intent intent = new Intent();
// intent.putExtra("App", getPackageName()); // не впливає на запуск але зручно для відладки.
intent.setClassName("com.palmapos.mobile.dm.vchasno", "com.embarcadero.services.EDMRemoteService");
// intent.setPackage, intent.setAction не підійде, так як в ДМ не налаштовано intent-filter.
// різниця в самому запуску наступна: https://stackoverflow.com/questions/62620680/whats-the-function-of-intent-setpackage
bindService(intent, dmServiceConn, Context.BIND_AUTO_CREATE);
З версії Device Manager 7.0 є можливість запускати застосунок як foreground service для роботи у фоні постійно не залежно від того чи активна касова програма.
Зверніть увагу що запуск застосунку як foreground service працює лише з 8 версії Android.
Різниця в запуску буде наступна:
Запуск сервісу
val intent = Intent()
intent.putExtra("App", activity?.packageName);
intent.setAction("com.embarcadero.services.EDMRemoteService");
intent.setPackage("com.palmapos.mobile.dm.vchasno");
intent.setClassName("com.palmapos.mobile.dm.vchasno", "com.embarcadero.services.EDMRemoteService")
activity?.bindService(intent, yourServiceConnection, BIND_AUTO_CREATE)
Запуск foreground сервісу
val intent = Intent()
intent.putExtra("App", activity?.packageName);
intent.setAction("com.embarcadero.services.EDMRemoteService");
intent.setPackage("com.palmapos.mobile.dm.vchasno");
intent.setClassName("com.palmapos.mobile.dm.vchasno", "com.embarcadero.services.EDMRemoteService")
activity?.startForegroundService(intent)
саме activity?.bindService(intent, yourServiceConnection, BIND_AUTO_CREATE) можна залишити у варіанті запуску як foreground service для перевірки що сервіс коректно запустився.
За посиланням знаходиться приклад додатку для запуску ДМ та відео роботи.