2017-09-04 41 views
15

Próbowałem znaleźć rozwiązanie tego problemu, ale nie udało mi się. Pracuję więc nad aplikacją POS w systemie Android i muszę drukować pokwitowania sprzedaży/zakupu za pomocą drukarki bluetooth.mBluetoothSocket.connect() drukuje linię

Druk, pracuje bez zarzutu, per se, ale gdy zgłoszę mBluetoothSocket.connect(), to wypisuje connect "8869-XX-xxxxxx" na górze druku, którego nie chcieć. Nie chcę długo pozostawiać otwartego połączenia i chcę, aby aplikacja łączyła się tylko w razie potrzeby. Jak to osiągnąć? Dowolni faceci pomocy. Znajdź kod poniżej. Z góry dziękuję.

package anil.com.andoirdbluetoothprint; 


import java.io.IOException; 
import java.io.OutputStream; 
import java.nio.ByteBuffer; 
import java.util.Set; 
import java.util.UUID; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothSocket; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.Toast; 


public class MainActivity extends Activity implements Runnable { 
    protected static final String TAG = "TAG"; 
    private static final int REQUEST_CONNECT_DEVICE = 1; 
    private static final int REQUEST_ENABLE_BT = 2; 
    Button mScan, mPrint, mDisc; 
    BluetoothAdapter mBluetoothAdapter; 
    private UUID applicationUUID = UUID 
      .fromString("00001101-0000-1000-8000-00805F9B34FB"); 
    private ProgressDialog mBluetoothConnectProgressDialog; 
    private BluetoothSocket mBluetoothSocket; 
    BluetoothDevice mBluetoothDevice; 

    @Override 
    public void onCreate(Bundle mSavedInstanceState) { 
     super.onCreate(mSavedInstanceState); 
     setContentView(R.layout.activity_main); 
     mScan = (Button) findViewById(R.id.Scan); 
     mScan.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View mView) { 
       mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
       if (mBluetoothAdapter == null) { 
        Toast.makeText(MainActivity.this, "Message1", Toast.LENGTH_SHORT).show(); 
       } else { 
        if (!mBluetoothAdapter.isEnabled()) { 
         Intent enableBtIntent = new Intent(
           BluetoothAdapter.ACTION_REQUEST_ENABLE); 
         startActivityForResult(enableBtIntent, 
           REQUEST_ENABLE_BT); 
        } else { 
         ListPairedDevices(); 
         Intent connectIntent = new Intent(MainActivity.this, 
           DeviceListActivity.class); 
         startActivityForResult(connectIntent, 
           REQUEST_CONNECT_DEVICE); 
        } 
       } 
      } 
     }); 

     mPrint = (Button) findViewById(R.id.mPrint); 
     mPrint.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View mView) { 
       Thread t = new Thread() { 
        public void run() { 
         try { 
          OutputStream os = mBluetoothSocket 
            .getOutputStream(); 
          String BILL = ""; 
// Before this line, it is printing "CONNECT 88C9-XX-XXXXXX" 
          BILL = "Company Name \n"; 
          BILL = BILL + "Address \n"; 
          BILL = BILL + "--------------- \n"; 
          BILL = BILL + "Item1 : Quantity \n"; 
          BILL = BILL + "Rate : 100 $ \n"; 
          BILL = BILL + "-----------------\n"; 
          BILL = BILL + "Thank You \n"; 
          os.write(BILL.getBytes()); 
          //This is printer specific code you can comment ==== > Start 

          // Setting height 
          int gs = 29; 
          os.write(intToByteArray(gs)); 
          int h = 104; 
          os.write(intToByteArray(h)); 
          int n = 162; 
          os.write(intToByteArray(n)); 

          // Setting Width 
          int gs_width = 29; 
          os.write(intToByteArray(gs_width)); 
          int w = 119; 
          os.write(intToByteArray(w)); 
          int n_width = 2; 
          os.write(intToByteArray(n_width)); 


         } catch (Exception e) { 
          Log.e("MainActivity", "Exe ", e); 
         } 
        } 
       }; 
       t.start(); 
      } 
     }); 

     mDisc = (Button) findViewById(R.id.dis); 
     mDisc.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View mView) { 
       if (mBluetoothAdapter != null) 
        mBluetoothAdapter.disable(); 
      } 
     }); 

    }// onCreate 

    @Override 
    protected void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     try { 
      if (mBluetoothSocket != null) 
       mBluetoothSocket.close(); 
     } catch (Exception e) { 
      Log.e("Tag", "Exe ", e); 
     } 
    } 

    @Override 
    public void onBackPressed() { 
     try { 
      if (mBluetoothSocket != null) 
       mBluetoothSocket.close(); 
     } catch (Exception e) { 
      Log.e("Tag", "Exe ", e); 
     } 
     setResult(RESULT_CANCELED); 
     finish(); 
    } 

    public void onActivityResult(int mRequestCode, int mResultCode, 
           Intent mDataIntent) { 
     super.onActivityResult(mRequestCode, mResultCode, mDataIntent); 

     switch (mRequestCode) { 
      case REQUEST_CONNECT_DEVICE: 
       if (mResultCode == Activity.RESULT_OK) { 
        Bundle mExtra = mDataIntent.getExtras(); 
        String mDeviceAddress = mExtra.getString("DeviceAddress"); 
        Log.v(TAG, "Coming incoming address " + mDeviceAddress); 
        mBluetoothDevice = mBluetoothAdapter 
          .getRemoteDevice(mDeviceAddress); 
        mBluetoothConnectProgressDialog = ProgressDialog.show(this, 
          "Connecting...", mBluetoothDevice.getName() + " : " 
            + mBluetoothDevice.getAddress(), true, false); 
        Thread mBlutoothConnectThread = new Thread(this); 
        mBlutoothConnectThread.start(); 
        // pairToDevice(mBluetoothDevice); This method is replaced by 
        // progress dialog with thread 
       } 
       break; 

      case REQUEST_ENABLE_BT: 
       if (mResultCode == Activity.RESULT_OK) { 
        ListPairedDevices(); 
        Intent connectIntent = new Intent(MainActivity.this, 
          DeviceListActivity.class); 
        startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE); 
       } else { 
        Toast.makeText(MainActivity.this, "Message", Toast.LENGTH_SHORT).show(); 
       } 
       break; 
     } 
    } 

    private void ListPairedDevices() { 
     Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter 
       .getBondedDevices(); 
     if (mPairedDevices.size() > 0) { 
      for (BluetoothDevice mDevice : mPairedDevices) { 
       Log.v(TAG, "PairedDevices: " + mDevice.getName() + " " 
         + mDevice.getAddress()); 
      } 
     } 
    } 

    public void run() { 
     try { 
      mBluetoothSocket = mBluetoothDevice 
        .createRfcommSocketToServiceRecord(applicationUUID); 
      mBluetoothAdapter.cancelDiscovery(); 
      mBluetoothSocket.connect(); 
      mHandler.sendEmptyMessage(0); 
     } catch (IOException eConnectException) { 
      Log.d(TAG, "CouldNotConnectToSocket", eConnectException); 
      closeSocket(mBluetoothSocket); 
      return; 
     } 
    } 

    private void closeSocket(BluetoothSocket nOpenSocket) { 
     try { 
      nOpenSocket.close(); 
      Log.d(TAG, "SocketClosed"); 
     } catch (IOException ex) { 
      Log.d(TAG, "CouldNotCloseSocket"); 
     } 
    } 

    private Handler mHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      mBluetoothConnectProgressDialog.dismiss(); 
      Toast.makeText(MainActivity.this, "DeviceConnected", Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    public static byte intToByteArray(int value) { 
     byte[] b = ByteBuffer.allocate(4).putInt(value).array(); 

     for (int k = 0; k < b.length; k++) { 
      System.out.println("Selva [" + k + "] = " + "0x" 
        + UnicodeFormatter.byteToHex(b[k])); 
     } 

     return b[3]; 
    } 

    public byte[] sel(int val) { 
     ByteBuffer buffer = ByteBuffer.allocate(2); 
     buffer.putInt(val); 
     buffer.flip(); 
     return buffer.array(); 
    } 

} 

Odpowiedz

3

To nie jest Twój kod, który drukuje ten wiersz, ale wykonane przez ciebie złe konfiguracje drukarki. . . Wszystkie drukarki mają ich na konfiguracjach i ustawieniach ale prawie Większość drukarek POS oferują skonfigurować margines strony, nagłówek (w Twoim przypadku), stopki i białymi spacjami sprawdzić this jak prefrencje drukarskich więc zostajemy z dwóch opcji

1 - > albo ustawić preferencje ręcznie (jest to wygodne)

2 -> Konfiguracja/zestaw preferencje przed wydrukowaniem (Trzeba mieć wiedzę poleceń drukarki do tego, aby wysłać do drukarki przed wysłaniem dane rzeczywiste)

Last but not least go jest również możliwe, że Twoja drukarka POS i urządzenie z Androidem nie są ze sobą zgodne: D. . Jest to możliwe ze względu na brak dopasowanej komunikacji kodującej twoją drukarkę, z interpretacją pomyślnego kodu strony wstrząsowej/odpowiedzi na dane do wydrukowania

Musisz albo wyłączyć, albo wysłać kod/odpowiedź, którą lubi Twoja drukarka. .