首页 文章

无法创建MediaPlayer,音板的错误

提问于
浏览
1

调试时我无法创建MediaPlayer

当我点击声音按钮时,应用加载然后挂起 . 这是logcat错误我似乎无法找到出错的地方 .

04-03 16:00:17.273: ERROR/gralloc(61): [unregister] handle 0x4456d0 still locked (state=40000001)
04-03 16:00:22.793: ERROR/PlayerDriver(31): Command PLAYER_PREPARE completed with an error or info PVMFErrResource
04-03 16:00:22.803: ERROR/MediaPlayer(279): error (1, -17)
04-03 16:00:17.273: ERROR/gralloc(61): [unregister] handle 0x4456d0 still locked (state=40000001)

这是我的代码 .

package com.yes.hotrod;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class main extends Activity {
MediaPlayer FilmSound=new MediaPlayer();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    setVolumeControlStream(AudioManager.STREAM_MUSIC);

    Button button1 = (Button) findViewById(R.id.button1);
    FilmSound = MediaPlayer.create(getApplicationContext(),
            R.raw.animalkingdom);
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.animalkingdom);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.animalkingdom);
                FilmSound.start();
            }
        }
    });

    Button button2 = (Button) findViewById(R.id.button2);
    FilmSound = MediaPlayer.create(getApplicationContext(),
            R.raw.bigassstunt);
    button2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.bigassstunt);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.bigassstunt);
                FilmSound.start();
            }
        }
    });
    Button button3 = (Button) findViewById(R.id.button3);
    FilmSound = MediaPlayer
            .create(getApplicationContext(), R.raw.godsofwar);
    button3.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.godsofwar);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.godsofwar);
                FilmSound.start();
            }
        }
    });
    Button button4 = (Button) findViewById(R.id.button4);
    FilmSound = MediaPlayer.create(getApplicationContext(), R.raw.greentea);
    button4.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.greentea);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.greentea);
                FilmSound.start();
            }
        }
    });
    Button button11 = (Button) findViewById(R.id.button11);
    FilmSound = MediaPlayer.create(getApplicationContext(), R.raw.havefun);
    button11.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.havefun);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.havefun);
                FilmSound.start();
            }
        }
    });
    Button button6 = (Button) findViewById(R.id.button6);
    FilmSound = MediaPlayer.create(getApplicationContext(),
            R.raw.kisswashot);
    button6.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.kisswashot);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.kisswashot);
                FilmSound.start();
            }
        }
    });
    Button button7 = (Button) findViewById(R.id.button7);
    FilmSound = MediaPlayer.create(getApplicationContext(), R.raw.ohshit);
    button7.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.ohshit);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.ohshit);
                FilmSound.start();
            }
        }
    });
    Button button8 = (Button) findViewById(R.id.button8);
    FilmSound = MediaPlayer.create(getApplicationContext(),
            R.raw.throwingstar);
    button8.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.throwingstar);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.throwingstar);
                FilmSound.start();
            }
        }
    });
    Button button9 = (Button) findViewById(R.id.button9);
    FilmSound = MediaPlayer.create(getApplicationContext(),
            R.raw.twolegittwoquit);
    button9.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.twolegittwoquit);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.twolegittwoquit);
                FilmSound.start();
            }
        }
    });
    Button button10 = (Button) findViewById(R.id.button10);
    FilmSound = MediaPlayer.create(getApplicationContext(), R.raw.whiskey);
    button10.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.whiskey);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.whiskey);
                FilmSound.start();
            }
        }
    });
    Button button5 = (Button) findViewById(R.id.button5);
    FilmSound = MediaPlayer.create(getApplicationContext(), R.raw.demons);
    button5.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (FilmSound.isPlaying()) {
                FilmSound.stop();
                FilmSound.reset();
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.demons);
                FilmSound.start();
            } else {
                FilmSound = MediaPlayer.create(getApplicationContext(),
                        R.raw.demons);
                FilmSound.start();
            }
        }
    });
}
}

这是准备的代码:

Button button1 = (Button) findViewById(R.id.button1);
        FilmSound = MediaPlayer.create(getApplicationContext(),
                R.raw.animalkingdom);
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    FilmSound.prepare();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (FilmSound.isPlaying()) {
                    FilmSound.stop();
                    FilmSound.reset();

                    FilmSound = MediaPlayer.create(getApplicationContext(),
                            R.raw.animalkingdom);
                    FilmSound.start();
                } else {
                    FilmSound = MediaPlayer.create(getApplicationContext(),
                            R.raw.animalkingdom);
                    FilmSound.start();
                }
            }
        });

4 回答

  • 0

    我刚才有类似的问题 . 我只需将以下内容添加到您的清单文件中即可解决问题:

    <uses-permission android:name="android.permission.INTERNET" />
    

    在ICS之前,不需要互联网许可 .

  • 10

    创建 MediaPlayer 后,尝试准备它:

    FilmSound.prepare();
    
  • 0

    检查这个问题:Android -- Can't play any videos (mp4/mov/3gp/etc.)?

    您是否尝试过以不同格式播放文件?也许你的声音需要一些Android没有的编解码器,所以prepare()失败了 .

  • 0

    删除 onClickListener 之外的 create() 方法 . 现在,当您启动应用程序时,它将创建10个FilmSound实例,因为代码在onClickListener之外,然后当您单击按钮时,它将创建FilmSound的第11个实例 . 可能这是Android 2.2下面的内存不足 . 使用 create() 方法后无需准备,它将在第一次创建后进行准备 .

    另外,我很确定 isPlaying() 可以抛出异常 .

    if (FilmSound != null) {
    try {
            if (FilmSound.isPlaying()) { 
                 FilmSound.release(); 
                 FilmSound = null;
            }
        } catch(Exception e) {FilmSound= new MediaPlayer(); }};
    
    if (FilmSound == null) {
        FilmSound= new MediaPlayer(); 
    }
        FilmSound = MediaPlayer.create(this, clip);
        FilmSound.start();
        FilmSound.setOnCompletionListener(this);
    

相关问题