0

目標: ボタンを 3 回クリックして、サウンドの再生を開始、停止、開始する

皆さんこんにちは

私はAndroidが初めてです。
ボタンをクリックしてサウンドの再生を停止した後、再生を再開するのに問題がありました。
この問題 (リンク)を調査し、適用するさまざまな方法を見つけました。
そのため、これを行うために 4 つの方法を (失敗して) 試しました。
異なる方法を使用する 4 つのボタンがあります。
ボタン 1 はコントロールとして使用されます。
さまざまな方法の結果については、コメントを参照してください。
以下に、LogCat からいくつかのエントリを投稿します。

ありがとうございました


関連する Android 状態図へのリンクは次のとおりです。


src/com.example.playsound/MainActivity.java

package com.example.playsound;

import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public  class MainActivity extends Activity {

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

    //Button Sound
    final MediaPlayer mPlayer1 = MediaPlayer.create(MainActivity.this, R.raw.playsound0);
    final MediaPlayer mPlayer2 = MediaPlayer.create(MainActivity.this, R.raw.playsound1);
    final MediaPlayer mPlayer3 = MediaPlayer.create(MainActivity.this, R.raw.playsound2);
    final MediaPlayer mPlayer4 = MediaPlayer.create(MainActivity.this, R.raw.playsound3);

    //Button References
    Button button1 = (Button)this.findViewById(R.id.button1);
    Button button2 = (Button)this.findViewById(R.id.button2);
    Button button3 = (Button)this.findViewById(R.id.button3);
    Button button4 = (Button)this.findViewById(R.id.button4);

    //Button 1 OnClickListener
    button1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(mPlayer1.isPlaying() ) {
                try {
                    mPlayer1.stop();                    
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                }
            }
                                                 //   BUTTON 1
            else {                                //   plays sound upon first click, stops on second click
                try {                              //    but does not play on third click
                    mPlayer1.start();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                }
            }

        }
    }); 

    //Button 2 Uses .prepareAsync() 
    button2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(mPlayer2.isPlaying() ) {            //  BUTTON 2
                try {                                // Plays sound upon first click, stops on second click
                    mPlayer2.stop();                  // But will not play upon third click
                    mPlayer2.reset();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                }
            }
            else {
                try {
                    mPlayer2.prepareAsync();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                }
                mPlayer2.start();

            }

        }
    }); 


    button3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(mPlayer3.isPlaying() ) {
                try {                                  //  BUTTON 3
                    mPlayer3.stop();                    //  Does not play sound upon first button click
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                }
            }
            else {
                mPlayer3.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
                    @Override
                    public void onPrepared(MediaPlayer mPlayer3) {
                        mPlayer3.start();
                    }

                });
            }

        }
    }); 

    //Button 4 OnClickListener
            button1.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    if(mPlayer4.isPlaying() ) {
                        try {
                            mPlayer4.stop();                    
                        } catch (IllegalStateException e) {
                            e.printStackTrace();
                        }
                    }
                                                         //   BUTTON 4
                    else {                                //   does not play sound on first click
                        try {
                            mPlayer4.prepare();
                        } catch (IllegalStateException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        mPlayer4.start();
                    }

                }
            }); 

    }

}

LogCat のほとんどのエラーは次のようなものです。

状態 8 で呼び出された prepareAsync

状態 0 で呼び出しを開始

状態 1 で呼び出しを開始


ほとんどのエラーは「call in state #」エラーです。
上記のリンクに掲載されている図を参考にしました。
正しい場所でメソッドを呼び出そうとすると、まだこれらのエラーが発生します。

4

1 に答える 1