在MainActivity中開啓了一個線程,用來連接藍牙
connectThread = new ConnectThread(selectedDevice, mBluetoothAdapter); connectThread.start();
此線程開啓後會獲得一個已經連接藍牙設備的BluetoothSocket
public void run(){ // 連接前先停止搜索,否則會影響連接速度 mmAdapter.cancelDiscovery(); // connect是一個阻塞式方法 try { mmSocket.connect(); } catch (IOException e) { Log.d(TAG, "run: 連接失敗"); // 連接失敗時要關閉socket try { mmSocket.close(); } catch (IOException e1) { e1.printStackTrace(); } return; } Log.d(TAG, mmSocket.isConnected()?"連接成功":"連接失敗"); manageConnectedSocket(mmSocket); }另一個TransActivity需要這個BluetoothSocket,只能通過MainActivity中開啓的線程來獲取
首先要在該線程類中提供一個方法
/** * 對外提供Socket * @return */ public BluetoothSocket getSocket() { Log.d(TAG, "getSocket: "+mmSocket==null?"socket爲空":"socket不爲空"); return mmSocket; }只要獲取了該線程,就能獲取到這個socket
那麼在其他Activity中怎麼獲取MainActivity中的線程呢?
首先聲明一個instance變量,然後再onCreate方法中賦予MainActivity實例
public static MainActivity instance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); instance=this;
在另一個Activity中獲取該實例,進而獲取到已經開啓的線程
MainActivity activity=MainActivity.instance; connectThread=activity.getConnectThread(); // 不開啓新的線程,而是從原有線程獲取Socket mSocket = connectThread.getSocket();
當然,不要忘了在MainActivity中提供獲取這個已經開啓的線程的方法
public ConnectThread getConnectThread(){ return connectThread; }
完~