Разъем Bluetooth подключить
Я пытаюсь получить все данные от устройства Bluetooth (Google Daydream Controller), чтобы реагировать на определенные пользовательские входы в приложении для Android. Я нашел веб-приложение ( https://github.com/mrdoob/daydream-controller.js), которое в значительной степени считывает данные так, как мне нужно. На самом деле мне нужна только обратная связь для кнопки приложения.
Но я не могу подключиться! При попытке подключения всегда возникает ошибка. Другие люди имеют подобный опыт, но в разных настройках.. Я не смог найти решение
public class TryAgain extends AppCompatActivity {
private static final String UUID_SERIAL_PORT_PROFILE = "00001101-0000-1000-8000-00805F9B34FB";
private static final String TAG = "tag";
BluetoothAdapter mBluetoothAdapter;
BluetoothDevice mDevice;
private BluetoothSocket mSocket = null;
private BufferedReader mBufferedReader = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_try_again);
findBT();
try {
openDeviceConnection(mDevice);
} catch (IOException e) {
e.printStackTrace();
}
}
void findBT()
{
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null)
{
System.out.println("No bluetooth adapter available");
}
if(!mBluetoothAdapter.isEnabled())
{
Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetooth, 0);
}
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if(pairedDevices.size() > 0)
{
for(BluetoothDevice device : pairedDevices)
{
if(device.getName().equals("Daydream controller"))
{
mDevice = device;
break;
}
}
}
System.out.println("Bluetooth Device Found");
}
private void openDeviceConnection(BluetoothDevice device)
throws IOException {
InputStream aStream = null;
InputStreamReader aReader = null;
try {
mSocket = device.createRfcommSocketToServiceRecord( getSerialPortUUID() );
mSocket.connect();
aStream = mSocket.getInputStream();
aReader = new InputStreamReader( aStream );
mBufferedReader = new BufferedReader( aReader );
} catch ( IOException e ) {
Log.e( TAG, "Could not connect to device", e );
close( mBufferedReader );
close( aReader );
close( aStream );
close( mSocket );
throw e;
}
}
private void close(Closeable aConnectedObject) {
if ( aConnectedObject == null ) return;
try {
aConnectedObject.close();
} catch ( IOException e ) {
}
aConnectedObject = null;
}
private UUID getSerialPortUUID() {
return UUID.fromString( UUID_SERIAL_PORT_PROFILE );
}
}
Первым шагом было бы прочитать поток данных, который отправляет устройство, а затем извлечь информацию, чтобы получить информацию о кликере. Конечно, подключение к устройству очень важно, и вот где я сейчас борюсь.
Сообщение об ошибке:
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
1 ответ
Вам нужно позвонить openDeviceConnection
из фонового потока, как это:
Thread yourBGThread = new Thread( ){
@Override
public void run() {
try {
openDeviceConnection(mDevice);
} catch (IOException e) {
e.printStackTrace();
}
}
};
yourBGThread.start();
Поместите этот код ниже findBT()