Android蓝牙打印机无需配对即可打印

时间:2013-07-05 04:58:40

标签: android bluetooth keyvaluepair

我正在使用此代码进行打印:

public class BPrinterActivity 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;
private Button mScan, mPrint, mDisc;
private UUID applicationUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private ProgressDialog mBluetoothConnectProgressDialog;
private BluetoothSocket mBluetoothSocket;
private BluetoothDevice mBluetoothDevice;
private BluetoothAdapter mBluetoothAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_bprinter);

    mScan = (Button) findViewById(R.id.Scan);
     mScan.setOnClickListener(new View.OnClickListener() {
         public void onClick(View mView) {
             mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
             if (mBluetoothAdapter == null) {
                 Toast.makeText(BPrinterActivity.this, "Message1", 2000).show();
             } else {
                 if (!mBluetoothAdapter.isEnabled()) {
                     Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                     startActivityForResult(enableBtIntent,REQUEST_ENABLE_BT);
                 } else {
                     ListPairedDevices();
                     Intent connectIntent = new Intent(BPrinterActivity.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 {

                         String BILL = "";
                         BILL = "1234567812345678ABCDEFGH";
                         BILL="الرئيسية";
                         BILL = "ABCDEFGH";
                         OutputStream os = mBluetoothSocket.getOutputStream();



                         os.write(BILL.getBytes());

                     } catch (Exception e) {
                         Log.e("Main", "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() {
     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(BPrinterActivity.this,DeviceListActivity.class);
             startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
         } else {
             Toast.makeText(BPrinterActivity.this, "Message", 2000).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(BPrinterActivity.this, "DeviceConnected", 5000).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();
 }
}

这段代码工作得很好但是在打印之前这将扫描设备配对然后打印现在我有打印机设备地址现在我直接想要打印而不扫描或削皮

0 个答案:

没有答案
相关问题