簡體   English   中英

如何從上一個活動中單擊某個按鈕時播放音頻文件

[英]How to play an Audio file when a certain button is clicked from previous activiy

我正在為我的學習目的制作語言應用程序並在Android中練習我希望將所有課程音頻存儲在一個數組中,當我按下例如音頻1時,我為每節課都有一個活動它會彈出與玩家的新活動(AudioPopup) .java)但問題我不想讓彈出窗口為每節課播放某些音頻我需要的是識別按下了哪個按鈕並打開我創建的AudioPopup並播放某些mp3

AudioPopup代碼

public class AudioPopup extends AppCompatActivity {

    SeekBar seek_bar;
    ImageView play_button, pause_button;
    MediaPlayer player;
    ImageView exitPlayer;
    Handler seekHandler = new Handler();
    private int [] audioFiles;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.audio_popup);

        setFinishOnTouchOutside(false);
        audioFiles = new int [] {R.raw.lesson1-1,R.raw.lesson1-2,R.raw.lesson1-3,R.raw.lesson1-4};


        getInit();
        seekUpdation();

        exitPlayer = (ImageView) findViewById(R.id.audio_exit_1);
        exitPlayer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                player.stop();

            }
        });

    }

    public void getInit() {
        seek_bar = (SeekBar) findViewById(R.id.seekbar_1);
        play_button = (ImageView) findViewById(R.id.audio_play_1);
        pause_button = (ImageView) findViewById(R.id.audio_stop_1);

        play_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                PlayAudio();

            }
        });
        pause_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                player.stop();
                releaseMediaPlayer();
                player = MediaPlayer.create(AudioPopup.this, lesson1-1);
                play_button.setImageResource(R.drawable.ic_play_circle_filled_black_48dp);
            }
        });

        player = MediaPlayer.create(this, R.raw.l01_audiotraining_grammatik_01);
        seek_bar.setMax(player.getDuration());
        seek_bar.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                seekChange(v);
                return false;
            }
        });


    }

    Runnable run = new Runnable() {
        @Override
        public void run() {
            seekUpdate();

        }
    };

public void seekUpdate() {


    seek_bar.setProgress(player.getCurrentPosition());
    seekHandler.postDelayed(run, 1000);



}

//event handler for the progress of seek bar
private void seekChange(View view) {
    if (player.isPlaying()) {
        SeekBar sb = (SeekBar) view;
        player.seekTo(sb.getProgress());

    }

}

private void releaseMediaPlayer() {
    // If the media player is not null, then it may be currently playing a sound.
    if (player != null) {
        // Regardless of the current state of the media player, release its resources
            // because we no longer need it.
            player.release();

            // Set the media player back to null. For our code, we've decided that
            // setting the media player to null is an easy way to tell that the media player
            // is not configured to play an audio file at the moment.
            player = null;
        }
    }

    private void PlayAudio(){

        if (player == null) {
            player = MediaPlayer.create(AudioPopup.this,R.raw.lesson1-1 );
        }

        if (player.isPlaying()) {

            player.pause();
            play_button.setImageResource(R.drawable.ic_play_circle_filled_black_48dp);
            try {
                player.prepare();
            } catch (IllegalStateException e) {

                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } else {


            play_button.setImageResource(R.drawable.ic_pause_circle_filled_black_48dp);
            player.start();


        }
    }

}

這只播放音頻我插入它無法識別第一個活動中的哪個按鈕來自

audio1 = (ImageView) popupView.findViewById(R.id.lesson1_audio_gramar_1);
assert audio1 != null;
audio1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent audio_intent = new Intent(getApplicationContext(), AudioPopup.class);
        startActivity(audio_intent);

    }
});

我有很多按鈕按下每節課的每個音頻,實際上是24課:(

您需要做的是從第一個活動傳遞所選課程並在第二個活動中加載播放適當的音頻

您可以通過多種方式識別要播放的按鈕(課程),

簡單的一個是數字1,2,3 ...每個數字代表課程或者您可以傳遞音頻文件的資源ID並在下一個活動中播放它此選項更好,因為您不必在下一個活動中使用if語句知道哪個課程索引4代表。

所以我們走吧

對於audio1按鈕,傳遞第1課的res id

audio1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent audio_intent = new Intent(getApplicationContext(), AudioPopup.class);
        audio_intent.putExtra("lesson_res_id", R.raw.lesson1-1);
        startActivity(audio_intent);

    }
});

對於audio2按鈕,傳遞第2課的res id

audio2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent audio_intent = new Intent(getApplicationContext(), AudioPopup.class);
        audio_intent.putExtra("lesson_res_id", R.raw.lesson2-2);
        startActivity(audio_intent);

    }
});

現在在第二個活動中,獲取此傳遞的值,並播放音頻。

int lessonResId = getIntent().getIntExtra("lesson_res_id", -100); //-100 is default, means the key 'lesson_res_id' was not found in extras bundle
playAudio(lessonResId);

你可以通過創建一個啟動彈出活動的方法重構代碼(如果你有太多的按鈕),並從onClick傳遞音頻res id來調用它

private void openPopupActivity(int resId){
    Intent audio_intent = new Intent(getApplicationContext(), AudioPopup.class);
    audio_intent.putExtra("lesson_res_id", resId);
    startActivity(audio_intent);
}

和onClick將是

audio2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        openPopupActivity(R.raw.lesson2-2);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM