2014-02-18 113 views
4

我正在使用藍牙熱敏打印機。打印機工作正常,但我想從一個活動連接打印機,並從另一個活動打印數據。現在我每次都必須連接到打印數據。我想連接打印機一次,並通過應用程序我想保持connection.Now我的問題是連接到打印機後如果我轉移到第二個活動打印機斷開連接。Android藍牙背景主題

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

誰上傳了此帖? (可能完全不相關的)代碼不符合「顯示研究工作;它是有用和清晰的」。 ''我聽說過線程,但我需要幫助來實現這一點「 - 這不是講授線程基礎知識的地方。 –

+1

爵士尊敬你的聲譽。我沒有其他選擇我已經學習電子和在一家IT公司工作 – Comrade

+0

好吧沒問題@Reshmy好。現在我提出了這個問題。請嘗試鼓勵新的傢伙。他們有至少20個代表,在stackoverflow聊天室中聊天 – Venu

回答

0

只是將藍牙連接移至服務。

+0

我知道這一點,但我不知道它是如何。你有任何樣品嗎? – Comrade