在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; }
完~