媒体播放器在线播放 MP3 文件

2023-11-22

我有一个 Android 应用程序,可以流式传输 MP3 文件并在播放器中播放该文件, 但问题是mediaPlayer.prepare();需要很长时间缓冲并且应用程序冻结 所以我尝试使用prepareAsync();,但是使用这个功能我无法让播放器播放下一个文件。

它只是在线播放单个文件;如果我需要播放另一个文件,我必须在播放结束时关闭并重新启动活动。这是我的代码:

public void playMp3(String _link)
{
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
    public void onPrepared(MediaPlayer mp) {
        if(!mediaPlayer.isPlaying()){
        mediaPlayer.start();
        Progressbar.setVisibility(View.INVISIBLE);
        play.setVisibility(View.GONE);
        stop.setVisibility(View.VISIBLE);
        songProgressBar.setProgress(0);
        songProgressBar.setMax(100);
        }
        updateProgressBar();      
    }
});
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        mediaPlayer.reset();
        songProgressBar.setProgress(0);
        songProgressBar.setSecondaryProgress(0);
        play.setVisibility(View.VISIBLE);
        stop.setVisibility(View.GONE);
        link = "http://server11.mp3quran.net/hawashi/002.mp3";
        playMp3(link);

    }
});
mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
       // Toast.makeText(getApplicationContext(), "n" + percent, Toast.LENGTH_LONG).show();
        songProgressBar.setSecondaryProgress(percent);

         if(percent==100)
         {
             Progressbar.setVisibility(View.INVISIBLE);

         }else if(percent > songProgressBar.getProgress())
         {
             Progressbar.setVisibility(View.INVISIBLE);
         }else
         {
             Progressbar.setVisibility(View.VISIBLE);
         }

    }
});

mediaPlayer.reset();
Progressbar.setVisibility(View.VISIBLE);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

try {
    mediaPlayer.setDataSource(_link);
    //mediaPlayer.prepare(); // might take long! (for buffering, etc)   //@@
    mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block///
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}}

实际上我不知道你的代码中的错误在哪里,但我会解释我是如何在我的应用程序中做到这一点的

public void playMp3(String _link){

                mediaPlayer.reset();
                Progressbar.setVisibility(View.VISIBLE);
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

            try {
                mediaPlayer.setDataSource(_link);
                mediaPlayer.setOnBufferingUpdateListener(this);
                mediaPlayer.setOnPreparedListener(this);
                //mediaPlayer.prepare(); // might take long! (for buffering, etc)   //@@
                mediaPlayer.prepareAsync();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block///
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

然后在您的类中实现 OnCompletionListener、OnPreparedListener 和 OnBufferingUpdateListener

public class PlayerActivity extends Activity implements OnCompletionListener, OnPreparedListener, OnBufferingUpdateListener{
.
.
.

并实现所有方法

public void onPrepared(MediaPlayer mediaplayer) {
    if(!mediaPlayer.isPlaying()){
        mediaPlayer.start();
        Progressbar.setVisibility(View.INVISIBLE);
        play.setVisibility(View.GONE);
        stop.setVisibility(View.VISIBLE);
        songProgressBar.setProgress(0);
        songProgressBar.setMax(100);
        }
        updateProgressBar();      
}

@Override
public void onCompletion(MediaPlayer mediaPlayer) {
    //mediaPlayer.reset();
        songProgressBar.setProgress(0);
        songProgressBar.setSecondaryProgress(0);
        play.setVisibility(View.VISIBLE);
        stop.setVisibility(View.GONE);
        link = "http://server11.mp3quran.net/hawashi/002.mp3";
        playMp3(link);
}

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
     songProgressBar.setSecondaryProgress(percent);

         if(percent==100)
         {
             Progressbar.setVisibility(View.INVISIBLE);

         }else if(percent > songProgressBar.getProgress())
         {
             Progressbar.setVisibility(View.INVISIBLE);
         }else
         {
             Progressbar.setVisibility(View.VISIBLE);
         }
}

我希望这对你有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

媒体播放器在线播放 MP3 文件 的相关文章

  • 改造中如何使用HashMap发布数据?

    您能解释一下如何使用以下方式发布数据吗hashmap in 改造2 这就是我发的帖子 FormUrlEncoded POST getProfile Call
  • Android 上的多处理

    我一直在 Android 上执行一些测试 以验证并行化算法 如 FFT 的性能可以提高多少 我通过使用带有 JNI FFTW 的 pthread 和 Java 线程 来自 JTransforms 来实现这些算法 我没有像预期那样通过使用线程
  • adb shell 输入带有空格的文本

    如何发送带有空格的文本 例如 一些文字 using adb shell input text 找到以下解决方案 adb shell input text some stext 工作正常 但是有什么简单的方法可以用 s 替换空格吗 Examp
  • 从ndk中的不同线程调用java方法

    我正在尝试使用 android 的 NDK 从 C 中的独立线程调用 java 静态方法 到目前为止我已经 JNIEnv env AttachJava jclass cls2 env gt FindClass com actvt showd
  • Context.startForegroundService 然后没有调用Service.startForeground

    这是我的 BroadcastReciever 类 该类处理启动电话状态 Code public class BroadCastRecieverBoot extends BroadcastReceiver Override public vo
  • 清除堆内存以防止内存不足异常

    我知道已经有人问过有关内存不足的问题 但我没有找到解决方案 在位图工厂中 我出现内存不足异常 甚至使用 inSampleSize 1 所以我经常用 try catch 内存不足异常来包围它 因为这是一个不好的做法 try catch Out
  • Android Studio 模拟器无法加载 Windows 10

    我在 Windows 10 上全新安装了 android studio 其中包含 android api 22 的所有软件包 当我运行模拟器时 我收到以下消息 C Users admin AppData Local Android sdk
  • React-Native 中的导航抽屉

    我是反应原生的新手 不介意我问一个基本问题 我想知道 实现抽屉式导航的分步过程是什么 推荐链接这个链接 https github com react native community react native side menu usage
  • Ionic4 电容器 android livereload?

    是否有可能在带有 livereload 的 Android 设备上运行带有电容器的 ionic 4 应用程序 我已经找了几个小时的答案了 但没有成功 请帮忙 如果使用最新版本 ionic cli 现在有一个命令ionic capacitor
  • 移动到SD卡

    我知道从 android 2 2 开始可以使用移动到 SD 卡功能 我想知道有没有办法在我的程序中检测设备是否支持移动到 SD 卡功能 如果支持 则可以移动 否则如果不支持 则什么也不会发生 将在手机内存中 我的主要问题是我的应用程序支持
  • 视图随软键盘移动,遮挡其他 UI 对象

    我有一个容器视图 我希望它始终位于视图底部 位于 ScrollView 下方 ScrollView 有一些 UI 对象 其中一个是 EditText 对象 目前 当用户点击 EditText 对象内部时 android softkeyboa
  • 如何在我的谷歌上嵌入转弯导航

    我想在我的 Android 应用程序中嵌入逐段导航 请给我一个教程或如何执行此操作的想法 提前致谢 如果您不固定使用谷歌地图 您可以使用基于 OpenStreetMap 地图的维基百科版本 的 SDK 有几个不错的 SDK 提供商 skob
  • 我怎样才能实现CoverFlow视图[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想用点线布局实现溢出视图 目前我正在使用 polidea 封面流库 URL github https
  • Meteor:即使设置了 ANDROID_HOME 也未设置

    操作系统 Ubuntu 14 04 框架 流星1 1 0 2 应用名称 Songofy 这是输出meteor install sdk android meteor install sdk android Found Android bund
  • 通知管理器所需的权限

    我正在尝试使用以下命令将振铃器设置为静音且请勿打扰优先级 AudioManager myAudioMgr AudioManager context getSystemService Context AUDIO SERVICE Notific
  • 如何将 Android 应用程序添加到已在 iOS 应用程序中使用的现有 Firebase 项目?

    我一直在我的 iOS 应用程序中使用 Firebase 项目 我现在想开始为 Android 应用程序使用相同的 Firebase 项目及其所有数据库和存储 在您的应用程序下Overview菜单 你应该按添加另一个应用程序并选择Androi
  • 使用 Android O 的“android:fontFamily”时出现错误“文件名必须以 .xml 结尾”?

    Android O 引入了一项新功能 XML 中的字体 它允许您将字体用作资源 我正在创建font资源文件中的文件夹 由安卓开发者 https developer android com preview features working w
  • 使用Gradle组装时如何更改Android应用程序包名称?

    是否可以使用 Gradle 更改 Android 应用程序的包名称 我需要编译同一应用程序的两个副本 并具有唯一的包名称 这样我就可以向市场发布两次 作为使用的更简单的替代方案产品口味 正如伊森的回答 https stackoverflow
  • AsyncTask的并行执行

    An 异步任务单击时执行 List
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收

随机推荐

  • Powershell - 检查远程进程,如果完成则继续

    作为备份操作的一部分 我运行 7zip 命令将文件夹压缩为单个 7z 文件 没有问题 因为我正在使用InVoke WMIMethod Example zip cmd c irFolder 7za exe a somedirectory 7z
  • 线程有不同的堆吗?

    据我所知 当操作系统创建线程时 每个线程都会获得一个不同的堆栈 我想知道每个线程是否也有一个独特的堆 不 所有线程共享一个公共堆 Each 线程有一个私有堆栈 它可以快速添加和删除项目 这使得基于堆栈的内存变得更快 但是如果您使用太多堆栈内
  • 将副本集转换为独立服务器后遇到 MongoDB 警告

    将 mongodb 副本集转换为独立服务器后 我遇到了以下警告 我执行了 rs remove host 并在启动 mongo 数据库时删除了 replSet 参数 root sam mongo MongoDB shell version 2
  • 用 PHP 编写的语言解析器库

    我正在寻找一个语言解析器用 PHP 编写 目标是阅读自定义语言 不读PHP代码 基本上 我想指定一种语言语法 给出一个代码片段并返回一个表示它的结构 然后我可以遍历该结构来执行代码片段 我相信该结构将是AST 但我不知道这是否是唯一的选择
  • 如何从 NodeMCU 中的无限重启循环中恢复?

    我的 NodeMCU 程序已进入无限重启循环 我的代码功能正常 但我尝试执行的任何操作 例如file remove init lua 甚至只是 node heap 它会出现恐慌并重新启动 并显示 PANIC unprotected erro
  • Visual Studio 设置文件 - 它是如何工作的?

    我不明白以下事情 app config applicationname exe config 和设置文件有什么区别 我无法在特定帐户下的 Windows7 AppData 目录中找到 settings 文件 我听说它应该位于那里的某个地方
  • Bootstrap v4 导航栏错误?

    问题就在这里 我从引导端获取了默认导航栏示例 https v4 alpha getbootstrap com components navbar 它们在结果中显示全尺寸的导航栏 当屏幕变小时 导航栏可能会折叠 但是当我将代码插入到我的项目中
  • 如何在 Android 上用 Java 创建 Multimap

    我在哪里可以找到 Java 的 multimap 实现 它可以在 Android 上运行 而无需包含任何其他类等 我发现的实现都需要其他东西 而这些东西又需要其他东西 而且很快就会变得混乱 我正在从 C 移植一个项目 并且是 java 的新
  • 在jquery中选择根元素

    我需要能够从 a 中选择根元素fragment不知道节点类型 类 id 或层次结构 div div div div div div div div div div 我希望能够执行类似 root 的操作 并在上面的示例中选择 0 更好的是我更
  • 为什么“True == not False”是语法错误?

    比较布尔值与 在 Python 中工作 但是当我应用布尔值时not运算符 结果是语法错误 Python 2 7 r27 82500 Sep 16 2010 18 02 00 GCC 4 5 1 20100907 Red Hat 4 5 1
  • MailKit:如何从 MimeMessage 本地下载所有附件

    我在网上查看了其他示例 但我无法弄清楚如何从 MimeMessage 对象下载和存储所有附件 我确实研究过 WriteTo 但无法让它工作 还想知道附件是否会按照原始文件名保存 并在电子邮件内键入 这是我到目前为止所拥有的 using va
  • 如何在C中进行无符号饱和加法?

    在 C 中编写饱和加法的最佳 最干净 最有效 方法是什么 函数或宏应添加两个无符号输入 需要 16 位和 32 位版本 并在总和溢出时返回全位 1 0xFFFF 或 0xFFFFFFFF 目标是使用 gcc 4 1 2 和 Visual S
  • 从 REST API 填充 Vue 模板组件中的表

    我有一个 Vue 组件 我试图获取其余 api 使用 axios 数据来填充表 其余调用在 chrome 中返回有效的 json 字符串 但是 我无法让它填充模板中的表格 当我运行视图时 我在其余调用中收到以下错误 类型错误 无法设置未定义
  • ES6:在Set/Map迭代期间从Set/Map中删除元素是否危险?

    安全代码new Set 可能看起来像 let items for let item of set if isBad item items push item for let item of items set delete item 我可以
  • 如何在 VB.net 中比较两个时间

    我想在VB net中比较两次 我有 1 42 21 PM 我希望将其与 VB net 中的 TimeOfDay 进行比较 我该怎么做 New DateTime 1 1 1 13 42 21 gt TimeOfDay 或者您可以附上一个Dat
  • 异常动态过滤器

    我正在研究一些 anorm 文档 来自 play 框架 并不清楚它是否支持常见的查询用例 动态过滤器 即用户在 10 个字段的搜索表单上填写 2 或 3 个搜索条件 在这种情况下 如何在不使用经典字符串操作的情况下动态构建查询 是的 我认为
  • @Valid 注释未验证子对象列表

    主要模型类如下 public class UserAddressesForm NotEmpty private String firstName NotEmpty private String lastName private List
  • iPhone 4S - BLE 数据传输速度

    我最近一直在安静地修改 BLE 蓝牙低功耗 连接类 但无法使其传输数据的速度超过 1KB 5 秒 我相信 在文档中 它说最大速度是每 20 毫秒 60 字节 通过数据传输并计算每组数据包后的 Ack 传输 我相信我们应该能够达到每秒 1 5
  • 在 Windows 8 中的 WinRT 上动态执行代码(C++ 或 .NET/C#)?

    Windows 8 Metro 下的 WinRT 是否允许动态加载和执行代码 例如 是否可以将 dll 下载到内存或隔离存储并从中运行代码 JIT 将脚本语言编译为本机汇编语言 例如第三方浏览器 的代码是否能够在 WinRT 中执行相同的操
  • 媒体播放器在线播放 MP3 文件

    我有一个 Android 应用程序 可以流式传输 MP3 文件并在播放器中播放该文件 但问题是mediaPlayer prepare 需要很长时间缓冲并且应用程序冻结 所以我尝试使用prepareAsync 但是使用这个功能我无法让播放器播