Я делаю приложение для передачи файлов на основе Bluetooth
, и я не уверен, как работать с Threads здесь.AcceptThread не возвращается к Activity on bluetooth file transfer app
Когда я начинаю слушать входящие соединения на серверной части приложения, работает отлично, но поток, который я использую для выполнения этой задачи, а не блокирующий пользовательский интерфейс, не возвращается к основной активности после его вызова. Вот часть кода:
public class AcceptThread extends Thread {
private BluetoothServerSocket mmServerSocket;
public BluetoothSocket mmBlueToothSocket;
private final BluetoothAdapter mmBluetoothAdapter;
/*Accept incomming connections on the server*/
public AcceptThread(BluetoothAdapter mBluetoothAdapter){
BluetoothServerSocket tmp = null;
this.mmBluetoothAdapter = mBluetoothAdapter;
//works well
try {
this.mmServerSocket = mmBluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(BluetoothConfig.mServiceName,BluetoothConfig.mUUID);
} catch (IOException e) {
mmServerSocket = tmp;
Log.d("AcceptThreadConstructorErr:", e.getMessage());
}
}
public void run(){
//while (true){
try {
mmBlueToothSocket = this.mmServerSocket.accept();
Log.d("AcceptThreadRun:", "mmServerSocket reached");
} catch (IOException e) {
Log.d("AcceptThreadRunErr:", e.getMessage());
//break;
}
//}
//If I call the ConnectedThread part of the code here it raises an error so I am trying to call it from my Activity but is not returning there after executing the run part of this class
}//run
}//AcceptThread class
public class MainActivity extends Activity {
private BluetoothServerSocket mmServerSocket;
public BluetoothSocket mmBlueToothSocket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//accept to listen for incomming connections
AcceptThread acceptThread = new AcceptThread(bConfig.getBluetoothAdapter());
acceptThread.start();
//After the start execution this part is never reached!!
connectedThread();
}
//Called from acceptThread once innitiated the connections listening in AcceptThread
public void connectedThread(){
socket = acceptThread.mmBlueToothSocket;
if (socket == null){
Log.d("acceptThread:", "socket Null in acceptThread");
}
if (socket != null){
try {
ConnectedThread connected = new ConnectedThread(socket);
connected.start();
Log.d("serverConnect", "connect.start() ok");
}catch (Exception e) {
Log.d("serverConnect:", e.getMessage());
}
}
}//connectedThread
}//Activity
Можете ли вы сказать мне, какой компонент реализации темы мне не хватает (может быть в Handler
?), Чтобы быть в состоянии достигнуть ConnectedThread
части и сделать его работу? , Кажется, что нет ошибки, это только поток, выходящий и не возвращающийся к активности вызывающего абонента.
Благодаря
в какой функции acceptThread.start() вызывается? вы поставили вызовы в статическом контексте? – nandeesh
@nandeesh, вызов выполняется по активности, посмотрите на последнюю часть фрагмента кода. – CoderRoller