You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RNXprinter.java 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.mirfalahtech.xprinter;
  2. import android.util.Log;
  3. import android.bluetooth.BluetoothAdapter;
  4. import android.bluetooth.BluetoothDevice;
  5. import java.util.Set;
  6. import com.facebook.react.bridge.Arguments;
  7. import com.facebook.react.bridge.Promise;
  8. import com.facebook.react.bridge.ReactApplicationContext;
  9. import com.facebook.react.bridge.ReactContextBaseJavaModule;
  10. import com.facebook.react.bridge.ReactMethod;
  11. import com.facebook.react.bridge.WritableArray;
  12. import com.facebook.react.bridge.WritableMap;
  13. import net.xprinter.utils.XPrinterDev;
  14. import net.xprinter.utils.XPrinterDev.*;
  15. import net.xprinter.utils.DataForSendToPrinterXp80;
  16. public class RNXprinter extends ReactContextBaseJavaModule {
  17. private String LOG_TAG = "RNXprinter";
  18. private ReactApplicationContext context;
  19. private byte[] mBuffer = new byte[0];
  20. // Bluetooth
  21. private Set<BluetoothDevice> mPairedDevices;
  22. private XPrinterDev mBluetoothPrinter = null;
  23. public RNXprinter(ReactApplicationContext reactContext) {
  24. super(reactContext);
  25. this.context = reactContext;
  26. Log.v(LOG_TAG, "RNXprinter alloc");
  27. }
  28. @Override
  29. public String getName() {
  30. return "RNXprinter";
  31. }
  32. @ReactMethod
  33. public void getDeviceList(Promise promise){
  34. BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  35. if (bluetoothAdapter == null) {
  36. promise.reject("-100", "Not bluetooth adapter");
  37. }
  38. else if (bluetoothAdapter.isEnabled()) {
  39. mPairedDevices = bluetoothAdapter.getBondedDevices();
  40. WritableArray pairedDeviceList = Arguments.createArray();
  41. for (BluetoothDevice device : mPairedDevices) {
  42. WritableMap deviceMap = Arguments.createMap();
  43. deviceMap.putString("name", device.getName());
  44. deviceMap.putString("address", device.getAddress());
  45. pairedDeviceList.pushMap(deviceMap);
  46. }
  47. promise.resolve(pairedDeviceList);
  48. }
  49. else {
  50. promise.reject("-103", "BluetoothAdapter not open...");
  51. }
  52. }
  53. @ReactMethod
  54. public void selectDevice(String address, Promise promise){
  55. for (BluetoothDevice device : mPairedDevices) {
  56. Log.d(LOG_TAG, "Checking:" + device.getAddress() + " : " + address);
  57. if(device.getAddress().equals(address)){
  58. mBluetoothPrinter = new XPrinterDev(PortType.Bluetooth, address);
  59. promise.resolve(true);
  60. return;
  61. }
  62. }
  63. promise.reject("-105", "Device address not exist.");
  64. }
  65. @ReactMethod
  66. public void pushText(String text, Integer size){
  67. if(size < 0 || size > 7) {
  68. size = 0;
  69. }
  70. Log.d(LOG_TAG, "Set Font Size:" + size);
  71. pushByteToBuffer(DataForSendToPrinterXp80.selectCharacterSize(size * 17));
  72. Log.d(LOG_TAG, "Print String:" + text);
  73. pushByteToBuffer(DataForSendToPrinterXp80.strTobytes(text + "\n"));
  74. }
  75. @ReactMethod
  76. public void pushFlashImage(Integer index){
  77. Log.d(LOG_TAG, "Print FLASH Image:" + index);
  78. pushByteToBuffer(DataForSendToPrinterXp80.printBmpInFLASH(index, 0));
  79. }
  80. @ReactMethod
  81. public void pushCutPaper(){
  82. Log.d(LOG_TAG, "Cut Paper");
  83. pushByteToBuffer(DataForSendToPrinterXp80.selectCutPagerModerAndCutPager(66, 0));
  84. }
  85. @ReactMethod
  86. public void print(Promise promise){
  87. if(mBluetoothPrinter == null){
  88. promise.reject("-107", "Must select printer first.");
  89. return;
  90. }
  91. if(mBuffer.length == 0){
  92. promise.reject("-109", "Buffer is empty");
  93. return;
  94. }
  95. ReturnMessage returnMessage = mBluetoothPrinter.Open();
  96. Log.d(LOG_TAG, "Open device:" + returnMessage.GetErrorStrings());
  97. returnMessage = mBluetoothPrinter.Write(mBuffer);
  98. Log.d(LOG_TAG, "Write data:" + returnMessage.GetErrorStrings());
  99. clearBuffer();
  100. returnMessage = mBluetoothPrinter.Close();
  101. Log.d(LOG_TAG, "Close device:" + returnMessage.GetErrorStrings());
  102. promise.resolve(true);
  103. }
  104. @ReactMethod
  105. public void clearPrintBuffer(){
  106. clearBuffer();
  107. }
  108. @ReactMethod
  109. public void printDemoPage(Promise promise){
  110. clearBuffer();
  111. pushFlashImage(1);
  112. pushText("Xprinter TEST\n", 2);
  113. pushText("如果您看到這個列印結果,表示您離成功非常的近了!加油!!!\n\n", 1);
  114. pushText("Powered by FuGood MyBigDay Team", 0);
  115. pushCutPaper();
  116. print(promise);
  117. }
  118. private void pushByteToBuffer(byte[] input){
  119. byte[] newByte = new byte[mBuffer.length + input.length];
  120. System.arraycopy(mBuffer, 0, newByte, 0, mBuffer.length);
  121. System.arraycopy(input, 0, newByte, mBuffer.length, input.length);
  122. mBuffer = newByte;
  123. Log.d(LOG_TAG, "Push buffer:" + mBuffer.length);
  124. }
  125. private void clearBuffer(){
  126. mBuffer = new byte[0];
  127. Log.d(LOG_TAG, "Clear buffer:" + mBuffer.length);
  128. }
  129. }