2

マルチタッチでドラムパッドに取り組んでいます。ボタンを拡張する内部クラスを使用しました:

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ありますが、機能するのはそのうちの7つだけです。残りはしません。7つの作業クラスのいずれかからmediaplayerオブジェクトを削除すると、機能していなかったクラスの1つが機能し始めます。

さらに、ログに次のエラーが表示されます。

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)

エラーがあるのは8番目のボタンの「TestButton8」クラスであり、後続のすべてのクラスにも同じ問題があることに注意してください。前述のように、mediaplayerオブジェクトを削除すると、たとえば、TestButtonからmediaplayerを削除した場合上記のクラスでは、「TestButton8」クラスが機能し始めます。なぜこうなった?

4

0 に答える 0