修订说明
- 感谢评论各位给我的建议,刚接手博客,很多地方还是不足。
- 评论给出的监听事件的写法和soundpool和mediaplayer不一样,这两点,都会在这篇博客做出修正
- 我觉得到这里交一个UI演示框架应该就够了,后期会更新一下更深层次的,像底部栏、顶部栏涉及fragment这些,我做好了一个,但是还没想好怎么讲
- 最后声明这篇解决办法是我的朋友兼部门同事邱同学给的…原参考链接mediaplayer用法
- 源码完整博客源码
区别给Button一个按键音和播放音频
- soundpool: 是 Android 提供的一个API类,用来播放简短的音频,可以完成音频的播放、暂停、恢复及停止等操作。也可以加载多个音频资源,进行管理与播放,这样时间会简短。同时还具备调节左右声道的音量值、语速、优先级以及播放的次数等等。可参考soundpool
- 如果按照我最开始的博客写的app,你会发现,播放音效的时候只有几秒,对的,所以我们错了,hhh
- mediaplayer步骤
- 创建对象
- 找到音频位置
- 准备状态
- start
如何实现
- 布局文件跟之前稍有不同,加了停止键
![布局](https://i-blog.csdnimg.cn/blog_migrate/87f4159ab677f1df074cdea0c4f0d8d8.png)
- 下面展示一些
内联代码片
。
<Button
android:id="@+id/btn_stop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="停止播放"
android:textColor="@color/colorBlack" />
- 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;
}
}
}
- 其中的监听事件也是和以往有些不同,用了监听接口