Hilo de fondo Bluetooth de Android

Estoy usando una impresora térmica bluetooth. La impresora está funcionando bien, pero quiero conectar la impresora de una actividad e imprimir datos de otra activity.Right ahora cada vez que tengo que conectarse a los datos de impresión. Quiero conectar la impresora una vez a través de la aplicación Quiero mantener la conexión. Ahora mi problema es después de conectar a la impresora Si me trasladé a la segunda actividad de la impresora se desconectó.

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); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 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(PrinterActivity.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(PrinterActivity.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 = ""; BILL = "\nInvoice No: ABCDEF28060000005" + " " + "04-08-2011\n"; BILL = BILL + "-----------------------------------------"; BILL = BILL + "\n\n"; BILL = BILL + "Total Qty:" + " " + "2.0\n"; BILL = BILL + "Total Value:" + " " + "17625.0\n"; BILL = BILL + "-----------------------------------------\n"; os.write(BILL.getBytes()); //This is printer specific code you can comment ==== > Start // Setting height int gs = 49; os.write(intToByteArray(gs)); int h = 104; os.write(intToByteArray(h)); int n = 262; os.write(intToByteArray(n)); // Setting Width int gs_width = 49; os.write(intToByteArray(gs_width)); int w = 104; os.write(intToByteArray(w)); int n_width = 2 ; os.write(intToByteArray(n_width)); /* // Print BarCode int gs1 = 29; os.write(intToByteArray(gs1)); int k = 107; os.write(intToByteArray(k)); int m = 73; os.write(intToByteArray(m)); String barCodeVal = "ASDFC028060000005";// "HELLO12345678912345012"; System.out.println("Barcode Length : " + barCodeVal.length()); int n1 = barCodeVal.length(); os.write(intToByteArray(n1)); for (int i = 0; i < barCodeVal.length(); i++) { os.write((barCodeVal.charAt(i) + "").getBytes()); } *///printer specific code you can comment ==== > End } 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() { // 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(PrinterActivity.this, DeviceListActivity.class); startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE); } else { Toast.makeText(PrinterActivity.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(PrinterActivity.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(); } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.