2017-09-04 2 views
15

J'ai essayé de trouver une solution pour cela, mais pas capable de. Je développe donc une application POS sur Android et j'ai besoin d'imprimer des reçus pour les ventes/achats en utilisant une imprimante bluetooth.mBluetoothSocket.connect() imprime une ligne

L'impression, fonctionne très bien, en tant que tel, mais chaque fois que j'appelle mBluetoothSocket.connect(), il imprime CONNECT « 8869-XX-XXXXX » au-dessus de l'impression, que je ne vouloir. Je ne veux pas laisser la connexion ouverte longtemps et je souhaite que l'application se connecte uniquement si nécessaire. Comment y parvenir? Toute aide les gars. Retrouver le code ci-dessous0 Merci d'avance.

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(); 
    } 

} 

Répondre

3

Ce n'est pas votre code qui imprime cette ligne mais les mauvaises configurations d'imprimante que vous avez faites. . . Toutes les imprimantes ont leur sur les configurations et les paramètres, mais presque la majorité des imprimantes POS offrent pour configurer la marge de page, HEADER (dans votre cas), pied de page et des espaces blancs vérifier this comme prefrences d'impression si vous reste deux choix

1 - > Soit définir les préférences manuellement (il est pratique)

2 -> Configurer/préférences définies avant l'impression (Vous devez avoir une connaissance des commandes d'imprimante pour cette option pour envoyer à l'imprimante avant que les données réelles d'envoi)

Last but not least, il Il est également possible que votre imprimante POS et votre appareil Android ne soient pas sympathiques ensemble: D. . il est possible que la communication correspondante soit encodée et que votre imprimante interprète le code/la réponse du shake réussi en données imprimables

Vous devez le désactiver ou envoyer le code/réponse que votre imprimante apprécie. .