Ich entwickle eine POS-Software mit WinDev für Mobile 26, ich zeige bereits einige Fenster an, jetzt ist die Frage, wie kann ich auf dem eingebauten POS-Drucker drucken?
Auf dem Kiosk ist eine Drucktest-App installiert, das funktioniert einwandfrei.
In den Einstellungen gibt es auch eine Druckereinstellung, aber hier steht „kein Gerät installiert“...
In der Dokumentation wird eine „AIDL-Schnittstelle“ erwähnt...
Und darüber hinaus gibt es ein geschriebenes API-Beispiel:
Gebundener Dienst
Code: Select all
Intent intent = new Intent();
intent.setPackage("com.sunmi.extprinterservice");
intent.setAction("com.sunmi.extprinterservice.PrinterService");
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
Code: Select all
ServiceConnection serviceConnection = new ServiceConnection() {
@Override public void onServiceConnected(ComponentName name, IBinder service) {
ExtPrinterService ext = ExtPrinterService.Stub.asInterface(service);
}
@Override public void onServiceDisconnected(ComponentName name) { }
};
Code: Select all
ext.printText(“123456\n”);
Code: Select all
unbindService(serviceConnection);
BEARBEITEN:
Ich habe es geschafft, auf dem Drucker zu drucken, aber es gibt einen kleinen Fehler, sodass es manchmal nicht sofort startet, daher die Schleife...
Code: Select all
import android.content.ComponentName;
import android.content.Context;
import static android.content.Context.BIND_AUTO_CREATE;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.widget.Toast;
import com.sunmi.extprinterservice.ExtPrinterService;
public static void PrintToSunmiPrinter(byte[] cmd) {
getCurrentActivity();
Context context = getApplicationContext();
ExtPrinterService ext;
ServiceConnection serviceConnection = new ServiceConnection() {
@Override public void onServiceConnected(ComponentName className, IBinder service) {
// This is called when the connection with the service has been
// established, giving us the service object we can use to
// interact with the service. Because we have bound to a explicit
// service that we know is running in our own process, we can
// cast its IBinder to a concrete class and directly access it.
try {
ExtPrinterService ext = ExtPrinterService.Stub.asInterface(service);
int ret_code;
int zz=0;
ret_code=ext.printerInit();
while(ret_code==-1){
zz++;
if (zz>100) { Toast.makeText(context, "ERROR! / "+ret_code, Toast.LENGTH_SHORT).show(); break; }
ret_code=ext.printerInit();
}
ext.sendRawData(cmd);
ext.cutPaper(1, 0);
ext.flush();
} catch(Exception ex){
Toast.makeText(getApplicationContext(), "ERROR! "+ex.getMessage(), Toast.LENGTH_SHORT).show();
}
}
@Override public void onServiceDisconnected(ComponentName className) {
// This is called when the connection with the service has been
// unexpectedly disconnected -- that is, its process crashed.
// Because it is running in our same process, we should never
// see this happen.
}
};
Intent intent = new Intent();
intent.setPackage("com.sunmi.extprinterservice");
intent.setAction("com.sunmi.extprinterservice.PrinterService");
context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
}
Mobile version