Wie kann ich auf einem Sunmi K2-Terminal mit WinDev Mobile etwas drucken (auf dem eingebauten Drucker)?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie kann ich auf einem Sunmi K2-Terminal mit WinDev Mobile etwas drucken (auf dem eingebauten Drucker)?

Post by Anonymous »

Ich verwende ein Sunmi K2 POS-Kassenterminal mit Android 7.1.2
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);
Es ist notwendig, einen neuen ServiceConnection-Dienst einzurichten, um den Rückruf zu binden

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) { }
};
Ext-Objekt verwenden, um die eigene Druckaufgabe zu realisieren

Code: Select all

ext.printText(“123456\n”);
Entbinden Sie den Dienst nach Abschluss der Nutzung

Code: Select all

unbindService(serviceConnection);
Die Frage ist, wie kann ich diesen Java-Code in WinDev Mobile verwenden?
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);
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post