Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Bluetoothsocket影响播放和录制音频的线程_Java_Android_Multithreading_Audio_Bluetooth Socket - Fatal编程技术网

Java Bluetoothsocket影响播放和录制音频的线程

Java Bluetoothsocket影响播放和录制音频的线程,java,android,multithreading,audio,bluetooth-socket,Java,Android,Multithreading,Audio,Bluetooth Socket,我有一个同时运行3个线程的应用程序。一个线程用于在手机和另一个蓝牙设备(Arduino)之间建立蓝牙连接。线程2通过bluetooh播放从另一部手机传入的音频。线程3通过蓝牙将音频录制并发送到另一部手机 如果手机试图与Arduino建立连接(当线程1运行bluetoothsocket.connect();)时,音频通信会出现很多故障。但是,当手机未尝试建立与Arduino的连接或连接已建立且线程1已完成时,则通信良好 下面是线程1-arduino的代码(此代码带有一个类) public类Conn

我有一个同时运行3个线程的应用程序。一个线程用于在手机和另一个蓝牙设备(Arduino)之间建立蓝牙连接。线程2通过bluetooh播放从另一部手机传入的音频。线程3通过蓝牙将音频录制并发送到另一部手机

如果手机试图与Arduino建立连接(当线程1运行bluetoothsocket.connect();)时,音频通信会出现很多故障。但是,当手机未尝试建立与Arduino的连接或连接已建立且线程1已完成时,则通信良好

下面是线程1-arduino的代码(此代码带有一个类)

public类ConnectThread扩展线程{
私人最终蓝牙插座mmSocket;
专用最终蓝牙设备;
公共连接线程(蓝牙设备){
//由于mmSocket是最终的,所以我们使用一个临时套接字变量
BluetoothSocket tmp=null;
mmDevice=设备;
//获取BluetoothSocket以连接给定的BluetoothDevice
试一试{
//MY_UUID是应用程序的UUID字符串,也由服务器代码使用
tmp=设备.createrFComSocketToServiceRecord(UUID);
}捕获(IOE){}
mmSocket=tmp;
}
公开募捐{
android.os.Process.setThreadPriority(Process.THREAD\u PRIORITY\u BACKGROUND);
//取消查找,因为它会减慢连接速度
mBluetoothAdapter.cancelDiscovery();
试一试{
//通过插座连接设备。这将阻止
//直到它成功或抛出异常
mmSocket.connect();
}捕获(IOException-connectException){
//无法连接;请关闭插座并退出
试一试{
mmSocket.close();
}捕获(IOException closeException){}
//将断开连接的设备的名称发送回UI活动
sendDeviceConnectionToActivity(deviceMAC,false);
Log.d(“Bluetoot已连接-->”,“NNNNNNNN”+connectException);
返回;
}
//执行管理连接的工作(在单独的线程中)
manageConnectedSocket(mmSocket、mmDevice);
//mConnectedThread=新连接的线程(mmSocket);
//mConnectedThread.start();
Log.d(“Bluetoot已连接-->”,mmDevice.getName();
}
/**将取消正在进行的连接,并关闭套接字*/
公开作废取消(){
试一试{
mmSocket.close();
}捕获(IOE){}
}
}
线程2和3中的音频代码(此代码与另一个类一起使用)

public void audioCreate(){
//音轨对象
曲目=新的音频曲目(AudioManager.STREAM\u VOICE\u呼叫,
16000,AudioFormat.CHANNEL\u OUT\u MONO,
编码、minSize、AudioTrack.MODE_流);
//录音对象
录音机=新录音机(MediaRecorder.AudioSource.VOICE_通信,16000,
AudioFormat.CHANNEL_单声道,编码,
缓冲区大小);
}
public void initiateBluetooth连接(Bluetooth设备已选择){
//Toast.makeText(getApplicationContext(),“服务打开”,Toast.LENGTH_SHORT.show();
deviceMAC=deviceSelected.getAddress();
mBluetoothAdapter.cancelDiscovery();
//取消任何试图建立连接的线程
如果(mConnectThread!=null){
mConnectThread.cancel();
mConnectThread=null;
}
mConnectThread=新的连接线程(选择的设备);
mConnectThread.setPriority(10);
mConnectThread.start();
}
公共类ConnectThread扩展线程{
私人最终蓝牙插座mmSocket;
专用最终蓝牙设备;
公共连接线程(蓝牙设备){
//由于mmSocket是最终的,所以我们使用一个临时套接字变量
BluetoothSocket tmp=null;
mmDevice=设备;
//获取BluetoothSocket以连接给定的BluetoothDevice
试一试{
//MY_UUID是应用程序的UUID字符串,也由服务器代码使用
tmp=设备.createrFComSocketToServiceRecord(UUID);
}捕获(IOE){}
mmSocket=tmp;
}
公开募捐{
android.os.Process.setThreadPriority(Process.THREAD\u PRIORITY\u AUDIO);
//取消查找,因为它会减慢连接速度
mBluetoothAdapter.cancelDiscovery();
试一试{
//通过插座连接设备。这将阻止
//直到它成功或抛出异常
mmSocket.connect();
}捕获(IOException-connectException){
//无法连接;请关闭插座并退出
试一试{
mmSocket.close();
}捕获(IOException closeException){}
//将断开连接的设备的名称发送回UI活动
sendDeviceConnectionToActivity(deviceMAC,false);
返回;
}
//执行管理连接的工作(在单独的线程中)
manageConnectedSocket(mmSocket、mmDevice);
//mConnectedThread=新连接的线程(mmSocket);
//mConnectedThread.start();
Log.d(“Bluetoot已连接-->”,mmDevice.getName();
}
/**将取消正在进行的连接,并关闭套接字*/
公开作废取消(){
试一试{
mmSocket.close();