我正在开发一个可播放语音邮件的React Native应用程序。我的生产应用程序出现问题。它不会在生产的iOS或testflight版本上播放语音邮件,但是会在android的生产版本以及iOS和Android的模拟器上播放。我是本机应用程序的新手,所以我试图弄清为什么会这样。
该应用程序不会崩溃,它会在用户界面中显示正在播放的内容,但不会播放音频。
关于生产版本无法播放声音的哪些具体事项要检查?
我正在使用当前版本的react-native-sound,目前为0.10.9。
这是我的togglePlay函数,它使用react-native-sound中的Sound。我已经导入了。
togglePlay(){
if (this.state.vmLoaded == false) {
if (this.state.vmLoading == true) {
return;
}
if (this.state.vmLoading == false) {
this.setState({ vmLoading: true });
Requester.getVoicemail(this.props.vmData, this.props.token, 'stream')
.then((res) => {
this.setState({
vmPath: res,
vmLoaded: true,
});
const vm = new Sound(res, '', (error) => {
if (error) {
// Show toast if voicemail did not load
Toast({ message: 'Failed to load voicemail' });
} else {
if (!this.state.vmStarted) {
this.setState({ vmStarted: true });
}
vm.play((success) => {
if (success) {
this.setState({
vmPlaying: false,
currentTime: this.state.vmLength / 1000,
});
// Clears the interval timer to keep thread
// from keeping track of timing
timer.clearInterval(this, 'playingInt');
} else {
// if call recording fails to play, show toast to user
Toast({ message: 'Failed to play recording' });
}
});
this.setState({ vmPlaying: true });
// if loaded successfully, set the instance of Sound as STATE vm
// allowing calls to the instance via this.state.vm
// ie: this.state.vm.play() will initiate playing the sound
this.setState({
// set instance of Sound to state
vm,
// set full length of recording to state
vmLength: vm.getDuration(),
// set current playing time of recording to state (new, so zero)
currentTime: 0,
// interval is still null until sound is played
interval: null,
// sound starts off paused (no audio)
vmPlaying: true,
// Finally, the recording has been loaded, setting
// this so another instance is not created on
// rerender (see above IF statements)
vmLoaded: true,
vmLoading: false,
});
}
});
}).then(() => {
timer.clearInterval(this, 'playingInt');
interval: timer.setInterval(this, 'playingInt', () => {
this.state.vm.getCurrentTime((seconds) => {
this.setState({ currentTime: seconds });
});
}, 1000);
});
}
} else if (this.state.vmLoaded == true) {
if (this.state.vmPlaying == true) {
this.state.vm.pause();
this.setState({ vmPlaying: false });
timer.clearInterval(this, 'playingInt');
} else {
this.state.vm.play();
this.setState({ vmPlaying: true });
timer.clearInterval(this, 'playingInt');
interval: timer.setInterval(this, 'playingInt', () => {
this.state.vm.getCurrentTime((seconds) => {
this.setState({ currentTime: seconds });
});
}, 1000);
}
}
}
请告知我其他信息是否有助于调试。
谢谢
答案 0 :(得分:1)
问题与手动切换静音iPhone上的铃声有关。声音正在通过免提电话播放。初始化声音后,我添加了`Sound.setCategory(“ Playback”),以使即使将振铃器静音也可以播放声音。
答案 1 :(得分:0)
我最近遇到了这个问题,在线上没有可用的回复对我有用。最后,我意识到mac / Xcode并未检测到我使用的.mp3
声音。因此,当您在Xcode或Finder中看到文件详细信息时,它无法识别足够的信息,例如持续时间。花了几个小时寻找解决方案之后。我发现了这个问题。
我做错了-手动将*.wav
或*.avi
文件重命名为.mp3
解决方案- 1.使用iTunes将文件转换为特定格式。手动转换文件格式会损坏文件,尽管它们可以在android上运行,但iOS在归档构建后无法检测到它们。 2.对于iOS,将声音添加到Xcode项目中的资源中