В моем приложении для Android я хотел бы подключиться к нескольким датчикам с помощью одной кнопки OnClickListener. Тем не менее, он должен принимать каждый датчик за раз, пока соединение не будет установлено, прежде чем переходить к следующему.
onSensorConnected
вызывается при успешном подключении датчика. Однако прямо сейчас он пытается подключиться к следующему датчику до вызова onSensorConnected
.
Поэтому я попытался реализовать wait()
при подключении датчика (onConnectSensors
) и notify()
при установленном соединении (onSensorConnected
). Это должно позволить следующему датчику пройти тот же процесс.
Однако датчики по-прежнему подключаются до сигнала notify
в onSensorConnected
. Мне нужно руководство по использованию wait
и notify
.
public class myFragment extends Fragment {
Button connect;
private Boolean sensorConnected = false;
private final Object lock = new Object();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.myLayout, container,false);
connect = (Button)root.findViewById(R.id.connectBtn);
connect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onConnectSensors(0); // Connect sensor one at a time..
onConnectSensors(1);
onConnectSensors(2);
onConnectSensors(3);
onConnectSensors(4);
onConnectSensors(5);
onConnectSensors(6);
onConnectSensors(7);
onConnectSensors(8);
onConnectSensors(9);
}
});
return root;
}
// Position is the sensor position in a recyclerview
public void onConnectSensors(int position) {
BluetoothDevice device = mScanAdapter.getDevice(position);
mSensorViewModel.connectSensor(getContext(), device);
// Sensor is now establishing connnection...
// Wait until recieving sensorConnected = true
try {
synchronized (lock) {
while ( sensorConnected != true ) { // Wait until sensorConnected is true
lock.wait();
}
sensorConnected = false; // reset status for next sensor
}
} catch ( InterruptedException x ) {}
}
@Override
public void onSensorConnected() { // This is called automatically when sensor is finishing connection
synchronized ( lock ) {
sensorConnected = true;
lock.notify();
}
}
}
wait()
,notify()
иsynchronized
, но никаких других потоков?... Кажется, что здесь отсутствует самая важная часть. Пожалуйста, уточните, что - person Lino   schedule 15.09.2020onSensorConnected
после завершения, то ясно, что другие датчики не были инициализированы (потому что вы не вызываете их все сразу). Поэтому вам следует просто полностью удалить эти вызовыwait()
иnotify()
и вызватьonSensorConnected
в методеonClick
. - person Lino   schedule 15.09.2020