Java Mediaplayer不适用于所有按钮
我正在研制一款多点触控鼓。我使用了一个扩展按钮的内部类:Java Mediaplayer不适用于所有按钮,java,android,button,media-player,Java,Android,Button,Media Player,我正在研制一款多点触控鼓。我使用了一个扩展按钮的内部类: package dubstep.brendan; import android.content.Context; import android.media.MediaPlayer; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.Button; public class TestButton extends
package dubstep.brendan;
import android.content.Context;
import android.media.MediaPlayer;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;
public class TestButton extends Button {
private MediaPlayer mpButtonClick =MediaPlayer.create(getContext(),R.raw.firework);
public TestButton(final Context context, final AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(final MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mpButtonClick.start();
}
if (event.getAction()==MotionEvent.ACTION_UP){
mpButtonClick.pause();
mpButtonClick.reset();
mpButtonClick = MediaPlayer.create(getContext(), R.raw.firework);
}
return super.onTouchEvent(event);
}
}
我还有12个扩展按钮和使用mediaplayer的类,但其中只有7个可以工作。其余的人没有。虽然如果我从7个工作类中的任何一个删除mediaplayer对象,其中一个不工作的类就会开始工作
此外,我的日志中还出现以下错误:
MediaPlayer(226): info/warning (1, 26)
PlayerDriver(30): Command PLAYER_PREPARE completed with an error or info PVMFErrResource
MediaPlayer(226): error (1, -17)
PlayerDriver(30): PVMFInfoErrorHandlingComplete
MediaPlayer(226): create failed:
MediaPlayer(226): java.io.IOException: Prepare failed.: status=0x1
MediaPlayer(226): at android.media.MediaPlayer.prepare(Native Method)
MediaPlayer(226): at android.media.MediaPlayer.create(MediaPlayer.java:644)
MediaPlayer(226): at dubstep.brendan.TestButton8.<init>(TestButton8.java:11)
MediaPlayer(226): at java.lang.reflect.Constructor.constructNative(Native Method)
MediaPlayer(226): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
MediaPlayer(226): at android.view.LayoutInflater.createView(LayoutInflater.java:500)
MediaPlayer(226): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
MediaPlayer(226): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
MediaPlayer(226): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
MediaPlayer(226): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
MediaPlayer(226): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
MediaPlayer(226): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
MediaPlayer(226): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
MediaPlayer(226): at android.app.Activity.setContentView(Activity.java:1622)
MediaPlayer(226): at dubstep.brendan.MultitouchtestActivity.onCreate(MultitouchtestActivity.java:33)
MediaPlayer(226): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
MediaPlayer(226): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
MediaPlayer(226): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
MediaPlayer(226): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
MediaPlayer(226): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
MediaPlayer(226): at android.os.Handler.dispatchMessage(Handler.java:99)
MediaPlayer(226): at android.os.Looper.loop(Looper.java:123)
MediaPlayer(226): at android.app.ActivityThread.main(ActivityThread.java:4363)
MediaPlayer(226): at java.lang.reflect.Method.invokeNative(Native Method)
MediaPlayer(226): at java.lang.reflect.Method.invoke(Method.java:521)
MediaPlayer(226): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
MediaPlayer(226): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
MediaPlayer(226): at dalvik.system.NativeStart.main(Native Method)
MediaPlayer(226):信息/警告(1,26)
PlayerDriver(30):命令玩家准备完成,但出现错误或信息PVMFErrResource
MediaPlayer(226):错误(1,-17)
PlayerDriver(30):PVMFInfoErrorHandlingComplete
MediaPlayer(226):创建失败:
MediaPlayer(226):java.io.IOException:准备失败:状态=0x1
MediaPlayer(226):在android.media.MediaPlayer.prepare(本机方法)
MediaPlayer(226):在android.media.MediaPlayer.create上(MediaPlayer.java:644)
MediaPlayer(226):位于dubstep.brendan.TestButton8.(TestButton8.java:11)
MediaPlayer(226):位于java.lang.reflect.Constructor.constructNative(本机方法)
MediaPlayer(226):位于java.lang.reflect.Constructor.newInstance(Constructor.java:446)
MediaPlayer(226):位于android.view.LayoutInflater.createView(LayoutInflater.java:500)
MediaPlayer(226):位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
MediaPlayer(226):位于android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
MediaPlayer(226):位于android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
MediaPlayer(226):在android.view.LayoutInflater.inflate(LayoutInflater.java:407)
MediaPlayer(226):在android.view.LayoutInflater.inflate(LayoutInflater.java:320)
MediaPlayer(226):在android.view.LayoutInflater.inflate(LayoutInflater.java:276)
MediaPlayer(226):位于com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
MediaPlayer(226):位于android.app.Activity.setContentView(Activity.java:1622)
MediaPlayer(226):位于dubstep.brendan.multi-touchtestactivity.onCreate(multi-touchtestactivity.java:33)
MediaPlayer(226):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
MediaPlayer(226):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
MediaPlayer(226):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
MediaPlayer(226):位于android.app.ActivityThread.access$2200(ActivityThread.java:119)
MediaPlayer(226):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
MediaPlayer(226):位于android.os.Handler.dispatchMessage(Handler.java:99)
MediaPlayer(226):位于android.os.Looper.loop(Looper.java:123)
MediaPlayer(226):位于android.app.ActivityThread.main(ActivityThread.java:4363)
MediaPlayer(226):位于java.lang.reflect.Method.Invokenactive(本机方法)
MediaPlayer(226):位于java.lang.reflect.Method.invoke(Method.java:521)
MediaPlayer(226):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
MediaPlayer(226):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
MediaPlayer(226):位于dalvik.system.NativeStart.main(本机方法)
请注意,我的第八个按钮的“TestButton8”类有一个错误,后面的所有类也有相同的问题,正如我前面提到的,如果我删除mediaplayer对象,例如,如果我从上面的TestButton类中删除mediaplayer,“TestButton8”类将开始工作。为什么会发生这种情况?我没有解决的办法,但是你可能想考虑一个鼓垫的<代码>声库< /代码>,我认为这是更合适的。mediaplayer是一个相当重的对象,而SoundPool应该更适合同时发出多个短声音。谢谢你的回复!我确实试过soundpool,但由于一些奇怪的原因,我不能在button类中使用它。你能给我举个例子吗?也许我做错了。我没有解决的办法,但是你可能想考虑一个鼓垫的<代码>声库< /代码>,我认为它更合适。mediaplayer是一个相当重的对象,而SoundPool应该更适合同时发出多个短声音。谢谢你的回复!我确实试过soundpool,但由于一些奇怪的原因,我不能在button类中使用它。你能给我举个例子吗?也许我做错了。