app修訂--如何播放音頻

修訂說明

  1. 感謝評論各位給我的建議,剛接手博客,很多地方還是不足。
  2. 評論給出的監聽事件的寫法和soundpool和mediaplayer不一樣,這兩點,都會在這篇博客做出修正
  3. 我覺得到這裏交一個UI演示框架應該就夠了,後期會更新一下更深層次的,像底部欄、頂部欄涉及fragment這些,我做好了一個,但是還沒想好怎麼講
  4. 最後聲明這篇解決辦法是我的朋友兼部門同事邱同學給的…原參考鏈接mediaplayer用法
  5. 源碼完整博客源碼

區別給Button一個按鍵音和播放音頻

  1. soundpool: 是 Android 提供的一個API類,用來播放簡短的音頻,可以完成音頻的播放、暫停、恢復及停止等操作。也可以加載多個音頻資源,進行管理與播放,這樣時間會簡短。同時還具備調節左右聲道的音量值、語速、優先級以及播放的次數等等。可參考soundpool
  2. 如果按照我最開始的博客寫的app,你會發現,播放音效的時候只有幾秒,對的,所以我們錯了,hhh
  3. mediaplayer步驟
    1. 創建對象
    2. 找到音頻位置
    3. 準備狀態
    4. start

如何實現

  1. 佈局文件跟之前稍有不同,加了停止鍵
  2. 佈局
  3. 下面展示一些 內聯代碼片
    <Button
        android:id="@+id/btn_stop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="停止播放"
        android:textColor="@color/colorBlack" />

  1. java文件
    下面展示一些 內聯代碼片
package com.example.eva;

import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

import com.example.eva.util.ToastUtil;

import java.util.HashMap;

public class ListenActivity extends AppCompatActivity implements View.OnClickListener {

    private Button mBtnPlay;
    private Button mBtnPause;
    private Button mBtnStop;
    private Button mBtnListenSubmit;
    private MediaPlayer mPlayer = null;
    private boolean isRelease = true;   //判斷是否MediaPlayer是否釋放的標誌

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_listen);
        mBtnListenSubmit = findViewById(R.id.btn_listen_submit);
        mBtnListenSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtil.showMsg(ListenActivity.this,"提交成功");
            }
        });
        bindViews();

    }

    private void bindViews() {
        mBtnPlay = findViewById(R.id.btn_play);
        mBtnPause = findViewById(R.id.btn_pause);
        mBtnStop = findViewById(R.id.btn_stop);

        //這裏的監聽事件用了評論的一個辦法,如果我沒理解錯的話,就是這個亞子去寫
        mBtnPlay.setOnClickListener(this);
        mBtnPause.setOnClickListener(this);
        mBtnStop.setOnClickListener(this);
    }

    public void onClick(View v){
        switch (v.getId()){
            case R.id.btn_play:
                if(isRelease){
                    mPlayer = MediaPlayer.create(this,R.raw.listen);
                    isRelease = false;
                }
                mPlayer.start();//開始播放
                mBtnPlay.setEnabled(false);
                mBtnPause.setEnabled(true);
                mBtnStop.setEnabled(true);
                break;
            case R.id.btn_pause:
                mPlayer.pause();//暫停播放
                mBtnPlay.setEnabled(true);
                mBtnPause.setEnabled(false);
                mBtnStop.setEnabled(false);
                break;
            case R.id.btn_stop:
                //mPlayer.pause();
                mPlayer.reset();     //重置MediaPlayer
                mPlayer.release();   //釋放MediaPlayer
                isRelease = true;
                mBtnPlay.setEnabled(true);
                mBtnPause.setEnabled(false);
                mBtnStop.setEnabled(false);

                break;
        }
    }


}

  1. 其中的監聽事件也是和以往有些不同,用了監聽接口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章