平台友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
应用程序实践(IV):和多功能性共享音乐播放器实现
应用程序背景音乐已实现。
创建通过方法。(残留);
对于音乐播放器的上下文,请接受此。()。t()上下文阻止了外部类的持有。在调用方法之前,您必须确保对象具有无效状态。否则,将报告错误。您可以在呼叫之前确定它是否为空。如果不是空的,请调用.reset()方法重置。
播放music.start()
暂停()
设置音乐播放event.ner(new。(){
void(mp){
//做…
});
顺序播放:
重置创建播放器,资源使用列表下一首歌 - >设置播放事件 - >音乐播放
在播放活动期间修改方法。
洗牌:
与顺序播放的区别在于,创建播放器时,列表中的资源会随机检索。
上一首歌,下一首歌
只需手动调用上述方法。
进度栏
使用。()要获取当前的播放位置。
多个接口共享音乐播放器
在编写音乐播放器代码时,我希望不仅在主界面中使用音乐按钮,还希望在数字选择界面,数字写作界面和其他接口中使用音乐按钮,我还希望能够控制播放和停止状态音乐随时。也就是说,应用程序的所有接口共享同一音乐播放器。
我的想法是定义类,将音乐播放器设置为静态对象,总共继承基本类,并实现音乐播放器共享。布局文件中的按钮有两个状态。音乐正在播放,音乐停止播放。切换时,我们需要根据当前的播放状态渲染音乐按钮。可以在每个布局文件中定义音乐按钮,以及我定义的布局文件,并在其他布局文件中使用标签引用。此功能如下实现代码。
当我们输入音乐按钮的接口时,需要完成三件事
1。调用设置布局文件2。获取按钮并根据状态3设置背景图片。播放音乐并设置播放以完成歌曲事件的切换
输入主要应用程序接口时,音乐播放器首次初始化并开始播放音乐。跳跃后,音乐播放器状态不会改变,并且只有根据玩家状态才能渲染控件。
因此,播放音乐并设置下一个歌曲的呼吁放置在主应用程序接口中,而渲染控件则放在过程中。
效果是,当您进入主界面时,您就会开始播放歌曲。之后,界面的任何切换都不会影响音乐播放,并且每个接口都可以停止或播放歌曲。
如果遇到报告无效指针错误的程序,该程序指向.e(r ..)和其他控制操作的呼叫,则可能会在呼叫的顺序中出现问题,并且在使用过程中尚未打电话,从而导致所获得的问题控制为无效。因此,在使用时,您必须在此之前确认已设置主布局。
特定的实施代码如下
public class BasicActivity extends Activity {
static boolean isPlay = true; //播放状态
static MediaPlayer mediaPlayer; //音乐播放器
static int musicIndex = 0; //当前播放序号
static Context context; //上下文
static int[] musicList = {R.raw.high_hopes, R.raw.don_t_miss_now, R.raw.don_t_you_worry_child}; //播放歌曲列表
Button music_btn; //前台按钮控件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this.getApplication().getApplicationContext();
//通过id获取布局文件中按钮控件
music_btn = (Button) findViewById(R.id.btn_music);
//根据播放状态渲染按钮图片
if (isPlay) {
music_btn.setBackgroundResource(R.mipmap.btn_music1);
} else {
music_btn.setBackgroundResource(R.mipmap.btn_music2);
}
//内存监视器
RefWatcher refWatcher = App.getRefWatcher(this);
refWatcher.watch(this);
}
//点击事件,将播放器状态置反并渲染按钮图片
public void onClick(View v) {
if (isPlay) {
if (mediaPlayer != null) {
mediaPlayer.pause();
music_btn.setBackgroundResource(R.mipmap.btn_music2);
isPlay = false;
}
} else {
mediaPlayer.start();
music_btn.setBackgroundResource(R.mipmap.btn_music1);
isPlay = true;
}
}
//设置播放器播放完毕回调函数,进行歌曲切换
public static void setPlayList() {
try {
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
musicIndex++;
if (musicIndex >= musicList.length) {
musicIndex = 0;
}
playMusic(musicList[musicIndex]);
setPlayList();
}
});
} catch (Exception e) {

e.printStackTrace();
}
}
//播放歌曲,保证播放器为空后创建新的播放器,开始播放音乐
public static void playMusic(int resId) {
if (mediaPlayer != null) {
mediaPlayer.reset();
}
mediaPlayer = MediaPlayer.create(context, resId);
mediaPlayer.start();
}
}
----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -----------------------------------------
----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -------
//继承了BasicActivity
public class MainActivity extends BasicActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//必须先设置视图,而后调用BasicActivity的onCreate函数
//若顺序反过来将会报空指针错误,因为没有渲染前台控件,则没有音乐按钮
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
playMusic(musicList[musicIndex]);
setPlayList();
}
//跳转游戏选择界面
public void OnPlay(View v) {
startActivity(new Intent(MainActivity.this, SelectActivity.class));
}
//跳转关于我们界面
public void OnAbout(View v) {
startActivity(new Intent(MainActivity.this, AboutActivity.class));
}
}
----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -------