我想从一个Android设备播放音乐到另一个设备。当我在一个设备中按PLAY按钮时,歌曲开始在另一个设备中播放。接收设备中没有音乐文件。我必须将歌曲从一个设备转移到另一个,一旦数据开始接收它就开始播放歌曲。我怎样才能实现这个机制?我尝试了一些代码,如下所示:
1.在两台设备之间建立连接后,我点击PLAY按钮开始发送.wav文件:
private void sendMusicFile() {
try {
InputStream inStream = getResources().openRawResource(R.raw.jingle);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buff = new byte[20480];
int i;
while ((i = inStream.read(buff, 0, buff.length)) > 0) {
baos.write(buff, 0, i);
}
mFileToSend = baos.toByteArray();
mIsFileSent = true;
Log.v("log_tag", "Length of File to Transfer : " + mFileToSend.length);
mChatService.write(mFileToSend);
} catch (IOException e) {
e.printStackTrace();
}
}
2.当消息接收到连接的设备时,我现在将接收到的字节[]保存到文件中。相反,我希望使用这个接收的字节[]一个接一个地保持连续性播放音乐。
case MESSAGE_READ:
//Received bytes from sending device
byte[] readBuf = (byte[]) msg.obj;
Log.v("log_tag", "ReadBuff Length : " + readBuf.length);
try {
if (fos == null) {
fos = new FileOutputStream("/sdcard/Recorded.wav");
}
fos.write(readBuf);
for (int i = 0; i < readBuf.length; i++) {
counter = counter + 1;
if (counter >= mFileLength) {
fos.close();
playSound();
}
}
} catch (FileNotFoundException e) {
Log.d("CAMERA", e.getMessage());
} catch (IOException e) {
Log.d("CAMERA", e.getMessage());
}
}
break;
3.我使用收到的byte []编写的音乐文件是合适的。但我想播放音乐作为文件传输启动或者当我从发送设备获得第一个字节[]时。我使用AudioTrack进行流式传输但它只是在整个音乐文件写入时播放音乐。它不会在收到的字节[]上播放音乐,这样做会从AudioTrack中产生异常噪音。
我只想为此成就实施蓝牙SPP。