登录/注册

安卓媒体播放器

更多

以下是一个简单的安卓媒体播放器实现步骤及代码示例:

1. 添加权限(AndroidManifest.xml)

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/> <!-- 如果需要网络播放 -->

2. 布局文件 (activity_main.xml)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="媒体播放器"/>

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnPlay"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="播放"/>

        <Button
            android:id="@+id/btnPause"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="暂停"/>

        <Button
            android:id="@+id/btnStop"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="停止"/>
    </LinearLayout>
</LinearLayout>

3. Java代码 (MainActivity.java)

public class MainActivity extends AppCompatActivity {
    private MediaPlayer mediaPlayer;
    private SeekBar seekBar;
    private Handler handler = new Handler();
    private Button btnPlay, btnPause, btnStop;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化UI组件
        seekBar = findViewById(R.id.seekBar);
        btnPlay = findViewById(R.id.btnPlay);
        btnPause = findViewById(R.id.btnPause);
        btnStop = findViewById(R.id.btnStop);

        // 设置播放源(本地文件示例)
        mediaPlayer = MediaPlayer.create(this, R.raw.sample_audio); // 将音频文件放在res/raw目录
        // 或网络音频:mediaPlayer.setDataSource("http://example.com/audio.mp3");

        // 准备播放器
        mediaPlayer.setOnPreparedListener(mp -> {
            seekBar.setMax(mediaPlayer.getDuration());
            updateSeekBar();
        });

        // 播放按钮事件
        btnPlay.setOnClickListener(v -> {
            if (!mediaPlayer.isPlaying()) {
                mediaPlayer.start();
            }
        });

        // 暂停按钮
        btnPause.setOnClickListener(v -> {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
            }
        });

        // 停止按钮
        btnStop.setOnClickListener(v -> {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
                mediaPlayer.prepareAsync(); // 停止后需要重新准备
            }
        });

        // 进度条监听
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if (fromUser) mediaPlayer.seekTo(progress);
            }
            @Override public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override public void onStopTrackingTouch(SeekBar seekBar) {}
        });
    }

    // 更新进度条的Runnable
    private Runnable updateSeekBarTask = new Runnable() {
        @Override
        public void run() {
            if (mediaPlayer != null) {
                seekBar.setProgress(mediaPlayer.getCurrentPosition());
                handler.postDelayed(this, 1000); // 每秒更新一次
            }
        }
    };

    private void updateSeekBar() {
        handler.postDelayed(updateSeekBarTask, 0);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mediaPlayer != null) {
            mediaPlayer.release();
            mediaPlayer = null;
        }
        handler.removeCallbacks(updateSeekBarTask);
    }
}

4. 功能说明

5. 注意事项

  1. 如需播放本地文件:
    • 将音频文件放入 res/raw 目录
    • 使用 MediaPlayer.create(this, R.raw.filename) 初始化
  2. 如需播放网络音频:
    • 添加网络权限
    • 使用 setDataSource() + prepareAsync()
  3. 处理音频焦点(建议实现AudioManager.OnAudioFocusChangeListener)
  4. 为兼容Android 10+,需使用作用域存储访问文件

提示:完整项目还需添加异常处理、缓冲状态显示、音频焦点管理等高级功能,建议使用ExoPlayer实现更专业的播放器。

LP3910:硬盘式便携媒体播放器的电源管理利器

LP3910:硬盘式便携媒体播放器的电源管理利器 在电子设备的设计中,电源管理是至关重要的一环。对于硬盘式便携媒体播放器这类对电源要求较高的设备,一款性能出色的电源管理芯片能极大提升设备的稳定性

2026-04-30 15:45:06

“新面孔,,芯更强”,芝杜发布2023媒体播放器全系新品

近年来,影音爱好者在选购媒体播放器的时候,不仅关注产品的视频解码能力、画面效果、声音素质,其中的操作性能、存储、WiFi等细节功能也成为了选购的参考选项。芝杜作为媒体播放器行业的领军品牌,旗下产品

2023-07-04 17:22:44

为什么无法使用媒体播放器应用程序通过GUI在android11中播放音频?

歌曲。 3. 假设我们通过任何媒体播放器应用程序/应用程序播放音频,我们听不到任何音频。 3.1 通过媒体播放器应用程序

2023-05-30 07:11:23

使用Arduino和Python仅用双手控制VLC媒体播放器

电子发烧友网站提供《使用Arduino和Python仅用双手控制VLC媒体播放器.zip》资料免费下载

资料下载 佚名 2022-11-17 14:27:59

基于Labview制作的音乐播放器源码分享

基于Labview制作的音乐播放器源码分享

资料下载 475648141 2021-12-01 10:07:16

个人媒体播放器中RealVideo的Blackfin解决方案

个人媒体播放器中RealVideo的Blackfin解决方案

资料下载 佚名 2021-05-27 20:58:20

stm32的MP3播放器

stm32的MP3播放器说明。

资料下载 NicolasGUI 2021-05-25 10:07:24

数码播放器的开发案例

数码播放器的开发案例说明。

资料下载 姚小熊27 2021-05-19 11:07:14

媒体播放器QT4.8.5,如何安装phonon呢?

如题,我需要一款流媒体播放器,看其它帖子qt4.8.5推荐用phonon,但是在提供的qt中没有

2022-11-28 07:41:56

视频流媒体播放器EasyPlayer报IllegalStateException错误如何处理呢

视频流媒体播放器EasyPlayer支持RTSP、RTMP、HTTP、HLS、UDP、RTP、File等多种流媒体协议播放,是兼具稳定性和兼容性

2022-09-02 16:59:15

如何构建手势控制Raspberry Pi媒体播放器

在本教程中,我们将使用MediaPipePython 库来检测我们的手势并使用它来控制 Raspberry Pi 媒体播放器。在这里,我们将使用总共六个手势,即开合拳和手的上、下、左、右移动。打开和关闭拳头手势用于播放

2022-08-01 17:09:54

嵌入式媒体播放器

摘要:计算机多媒体技术和嵌入式技术的高速发展,各种集计算机、通信、消费电子产品等特征于一体的电子产品得以广泛应用,嵌入式媒体播放器已经成为此类产品中主要的应用软件。同时,随着Linux系统在各种

2021-11-05 06:49:47

如何去实现一种嵌入式流媒体播放器的设计?

一种基于PXA270平台的嵌入式流媒体播放器设计

2021-06-04 06:45:57

如何使用VLC媒体播放器捕获或录制桌面屏幕视频

在此说明中,我将告诉您如何使用VLC媒体播放器捕获或录制桌面屏幕视频。

2019-12-13 16:32:52

嵌入式媒体播放器怎么实现?

随着嵌入式系统的不断发展,处理器性能的不断提升,存储系统容量的不断扩大,各种多媒体应用程序被移植到嵌入式系统中,多媒体组件成为其不可或缺的重要组

2019-08-29 06:12:31
7天热门专题 换一换
相关标签