android 蓝牙 thread,Android Bluetooth Background Thread

I am using a bluetooth thermal printer. The printer is working fine but I want to connect the printer from one activity and print data from another activity.Right now every time I have to connect to print data. I want to connect the printer once and through out the app I want to maintain the connection.Now my problem is after connecting to printer If I moved to second activity the printer get disconnected.

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值