android - 在android应用程序中加载音频文件
问题描述
我有一个带有许多音频文件的服务器,不时会添加更多文件。我希望将这些文件加载到我的 android 应用程序中,以便播放它们。我该怎么做呢?
我正在使用本机安卓
解决方案
用于播放、暂停、恢复音频等的简单 AudioHandler 类
public class AudioHandler {
private SimpleExoPlayer simpleExoPlayer;
//Start Playing
public void playAudio(String URL) {
try {
if(simpleExoPlayer == null) {
simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(
new DefaultRenderersFactory(mContext),
new DefaultTrackSelector(),
new DefaultLoadControl());
}
// Preparing from url
Uri uri = Uri.parse(URL);
MediaSource mediaSource = buildMediaSource(uri);
simpleExoPlayer.prepare(mediaSource, true, false);
simpleExoPlayer.setPlayWhenReady(true);
simpleExoPlayer.addListener(new Player.DefaultEventListener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
super.onPlayerStateChanged(playWhenReady, playbackState);
switch(playbackState) {
case Player.STATE_READY:
// Update UI -- Audio has start playing
break;
case Player.STATE_ENDED:
ReleaseMediaPlayer();
// Update UI -- Audio has ended
break;
default:
break;
}
}
@Override
public void onPlayerError(ExoPlaybackException error) {
super.onPlayerError(error);
ReleaseMediaPlayer();
// Update UI -- error
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public void pauseAudio(){
try{
if (simpleExoPlayer != null) {
simpleExoPlayer.setPlayWhenReady(false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void resumeAudioa(){
try{
if (simpleExoPlayer != null) {
simpleExoPlayer.setPlayWhenReady(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void ReleaseMediaPlayer(){
try{
if (simpleExoPlayer != null) {
simpleExoPlayer.release();
simpleExoPlayer = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private MediaSource buildMediaSource(Uri uri) {
return new ExtractorMediaSource.Factory(
new DefaultHttpDataSourceFactory("exoplayer-audios")).
createMediaSource(uri);
}
// Constructor and other methods...
}
推荐阅读
- java - 如果 Kafka 服务器不可用,则终止 Spring Kafka 事务
- plc - TwinCAT 3:块保持忙碌
- mysql - 如何撤销一个模式(crm)和用户(cus)中一张表的更新授权
- ios - 如何使用标头中的 Token 和 Alamofire 中的基本身份验证发出请求?
- java - 装饰器模式实现 - 扩展与实现
- amazon-web-services - 从 Lambda 在 EC2 上运行 Get 命令
- asp.net - 重写 URL 中间
- html - 将 doc 转换为 html 图形或形状时未转换为 html 格式
- php - 找不到驱动程序 Laravel + Xampp Ubunutu
- labview - Labview Vi 的 exe 文件无法通过 Python 脚本运行