当前位置: 首页 > 知识库问答 >
问题:

MediaPlayer播放和重播问题

裴兴学
2023-03-14

我正在尝试设置一个具有声音的媒体播放器,可以根据需要多次播放和重播。但我在第一次播放音频时出现了以下错误:

08-23 14:48:52.613: E/MediaPlayer(24194): error (1, -2147483648)
08-23 14:48:52.613: V/Preschool Basics(24194): Prepare failed.: status=0x1

我调用该剧的代码是:

    btnPlay = (Button) findViewById(R.id.soundButton);
    btnStop = (Button) findViewById(R.id.stopButton);

    mpSound = MediaPlayer.create(this, R.raw.a);
    mpSound.setLooping(false);
    btnPlay.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
                //mpSound.start();
                Uri uri = Uri.parse("android.resource://com.test.testing/" + R.raw.a);
                //Toast.makeText(getApplicationContext(), uri.toString(), 2000).show();
                playSong(uri.toString());
                btnPlay.setVisibility(View.GONE);
                btnStop.setVisibility(View.VISIBLE);
                btnStop.setOnClickListener(stopSound);
        }
    });

View.OnClickListener stopSound = new View.OnClickListener() {
    public void onClick(View v) {
        if (mpSound != null) {
            mpSound.stop();
            //mpSound.release();
            btnPlay.setVisibility(View.VISIBLE);
            btnStop.setVisibility(View.GONE);
        }
    }
};

playSong()函数是:

    private void playSong(String songPath) {
        try {

                mpSound.reset();
                mpSound.setDataSource(songPath);
                mpSound.prepare();
                mpSound.start();

                //Stop the song and replace button
                mpSound.setOnCompletionListener(new OnCompletionListener() {
                        public void onCompletion(MediaPlayer arg0) {
                            mpSound.stop();
                            btnPlay.setVisibility(View.VISIBLE);
                            btnStop.setVisibility(View.GONE);
                        }

                });

        } catch (IOException e) {
                Log.v(getString(R.string.app_name), e.getMessage());
        }
}

我的声音位于res/raw/a.mp3中

当我按下BTN播放按钮时,我会显示BTN停止按钮,但没有播放任何内容。

我希望让用户玩、停、玩等等。我怎样才能做到这一点?

LogCat:

08-23 15:41:20.761: E/AndroidRuntime(29438): FATAL EXCEPTION: main
08-23 15:41:20.761: E/AndroidRuntime(29438): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.test.testing/com.test.testing.AlpDisplay}: java.lang.NullPointerException
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2222)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2356)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.app.ActivityThread.access$600(ActivityThread.java:150)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.os.Looper.loop(Looper.java:137)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.app.ActivityThread.main(ActivityThread.java:5195)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at java.lang.reflect.Method.invokeNative(Native Method)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at java.lang.reflect.Method.invoke(Method.java:511)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at dalvik.system.NativeStart.main(Native Method)
08-23 15:41:20.761: E/AndroidRuntime(29438): Caused by: java.lang.NullPointerException
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.content.ContextWrapper.getResources(ContextWrapper.java:89)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.media.MediaPlayer.create(MediaPlayer.java:824)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at com.test.testing.MusicPlayer.<init>(MusicPlayer.java:13)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at com.test.testing.AlpDisplay.<init>(AlpDisplay.java:45)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at java.lang.Class.newInstanceImpl(Native Method)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at java.lang.Class.newInstance(Class.java:1319)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
08-23 15:41:20.761: E/AndroidRuntime(29438):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2213)
08-23 15:41:20.761: E/AndroidRuntime(29438):    ... 11 more

共有1个答案

胡国兴
2023-03-14

可以做得简单得多。我已经测试了此代码,它正在运行:

音乐播放器。java:

public class MusicPlayer
{
    private final int songResId = R.raw.your_song;
    private final MediaPlayer mediaPlayer;

    public MusicPlayer(Context context)
    {
        mediaPlayer = MediaPlayer.create(context, songResId);
        mediaPlayer.setLooping(true);
    }

    public void setPlaying(boolean isPlaying)
    {
        if (isPlaying)
        {
            mediaPlayer.start();
        }
        else
        {
            mediaPlayer.stop();
        }
    }

    public void release()
    {
        mediaPlayer.stop();
        mediaPlayer.release();
    }
}

用法(来自您的活动):

MusicPlayer musicPlayer = new MusicPlayer(this);
musicPlayer.setPlaying(true);  // play
musicPlayer.setPlaying(false); // stop
musicPlayer.setPlaying(true);  // play from the beginning    
musicPlayer.release();         // when done using MusicPlayer

确保您理解发布。

对于歌曲,我建议使用OGG格式(最大压缩),而不是MP3格式,因为它通常占用的空间要少50%,而且质量很难区分。您可以使用Audacity等转换文件。

 类似资料:
  • 我创建的Android应用程序包含2个按钮,点击每个按钮播放mp3文件。问题是,当我播放按钮1时,它播放声音1,当我单击按钮2时,它播放声音2。 我检查其他玩家的每个按钮是否正常工作,然后停止并播放单击的按钮 但是,如果我两次单击同一个按钮,则会将第一个音频保持在后台播放,然后再次播放另一个音频 我试图检查并停止它,但它不起作用! 我想,如果我点击按钮1,它将播放声音,如果再次点击它,它将停止播放

  • 本文向大家介绍Android MediaPlayer 音频倍速播放 调整播放速度问题,包括了Android MediaPlayer 音频倍速播放 调整播放速度问题的使用技巧和注意事项,需要的朋友参考一下 现在市面上的很多音视频App都有倍速播放的功能,例如把播放速度调整为0.5、1.5、2倍等等。 从Android API 23 (Android M)开始,MediaPlayer支持调整播放速度。

  • 我正在尝试我的第一个MediaPlayer javafx应用程序。我遵循了很多操作方法,但我仍然无法在新应用程序上运行视频。 这有什么不好: 应用程序构建正确,没有触发“文件未找到异常”,但播放器卡在未知状态,凸起的窗口具有白色固定背景。既没有提供任何类型的音频。有什么建议吗?

  • 主要内容:本节引言:,1.相关方法详解,2.使用代码示例,3.本节示例代码下载:,本节小结:本节引言: 本节带来的是Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频 该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码 和播放音视频。它支持三种不同的媒体来源: 本地资源 内部的URI,比如你可以通过ContentResolver来获取 外部URL(流) 对于Android所支持的的媒体格式列表 对于Androi

  • 本文向大家介绍Android MediaPlayer 播放音频的方式,包括了Android MediaPlayer 播放音频的方式的使用技巧和注意事项,需要的朋友参考一下 主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlayer 基础简介。 为了方便表达,定义变量名为mediaPlayer。 MediaPlay

  • 在我的应用程序中,我使用下面的代码使用带有Stream_Notification的MediaPlayer播放一个简短的通知声音。问题是,当应用播放通知声音,同时音乐播放器应用在后台播放音乐时,通知声音会中断(暂停)音乐播放。如何才能让自己APP的通知声音与背景音乐播放同步播放?多谢了。