获取其他Activity中开启的线程

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

完~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值