android 音乐播放器

服务和广播实现音乐播放器
先看示例:

[img]http://dl2.iteye.com/upload/attachment/0120/1004/ddd6241f-6aaa-35de-a924-67852acd5f04.gif[/img]

MusiceService代码

package mm.shandong.com.testsimplemedia.service;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MusicService extends Service {

int currentMusic = 0;//0表示没有音乐播放,1表示暂停,2表示正在播放,
int status;
MediaPlayer mp;
String[] musics = new String[]{"first.mp3", "second.mp3", "third.mp3"};
AssetManager am;

public MusicService() {

}

@Override
public void onCreate() {
am = getAssets();
mp = new MediaPlayer();

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
currentMusic++;
currentMusic = currentMusic % musics.length;
playMusic();
status = 2;
Intent intentTemp = new Intent("Update_Music_State");
intentTemp.putExtra("status", status);
intentTemp.putExtra("currentMusic", currentMusic);
sendBroadcast(intentTemp);

}
});
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("Get_Music_Control");
///动态注册播放器变化的广播接收者
MusicServiceReceiver musicServiceReceiver = new MusicServiceReceiver();
registerReceiver(musicServiceReceiver, intentFilter);
super.onCreate();

}

public class MusicServiceReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
int control = intent.getIntExtra("control", 0);
switch (control) {
case 0:
//暂停
if (status == 2) {
mp.pause();
status = 1;
}

break;
case 1:
///播放
if (status == 0) {
playMusic();
status = 2;
} else if (status == 1) {
mp.start();
status = 2;
}
break;
case 3:
break;
case 4:
//上一首
if (status == 0) {
if (currentMusic == 0) {
currentMusic = 2;
} else {
currentMusic--;
}
} else if (status == 1) {
if (currentMusic == 0) {
currentMusic = 2;
} else {
currentMusic--;
}
status = 0;

} else if (status == 2) {
if (currentMusic == 0) {
currentMusic = 2;
} else {
currentMusic--;
}
playMusic();
}
break;
case 5:
//下一首
if (status == 0) {
if (currentMusic == 2) {
currentMusic = 0;
} else {
currentMusic++;
}
} else if (status == 1) {
if (currentMusic == 2) {
currentMusic = 0;
} else {
currentMusic++;
}
status = 0;

} else if (status == 2) {
if (currentMusic == 2) {
currentMusic = 0;
} else {
currentMusic++;
}
playMusic();
}

break;
}
Intent intentTemp = new Intent("Update_Music_State");
intentTemp.putExtra("status", status);
intentTemp.putExtra("currentMusic", currentMusic);
sendBroadcast(intentTemp);

}
}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}

public void playMusic() {
try {

AssetFileDescriptor ad = am.openFd(musics[currentMusic]);
mp.reset();
mp.setDataSource(ad.getFileDescriptor(), ad.getStartOffset(), ad.getLength());
// mp.create(this,musics[currentMusic]);
mp.prepare();
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}


TestSimpleMediaActivity 代码
package mm.shandong.com.testsimplemedia;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;

import mm.shandong.com.testsimplemedia.service.MusicService;

public class TestSimpleMediaActivity extends AppCompatActivity {
ImageButton imageButton;
TextView textViewMp3Name;
TextView textViewMp3Author;
int status = 0;
String[] authors = new String[]{"张三", "李四", "王二"};
String[] names = new String[]{"first", "second", "thrid"};
int currentMusic = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_simple_media);
imageButton = (ImageButton) findViewById(R.id.imageButton);
textViewMp3Name = (TextView) findViewById(R.id.textViewMp3Name);
textViewMp3Author = (TextView) findViewById(R.id.textViewMp3Author);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent("Get_Music_Control");

if (status == 2) {
intent.putExtra("control", 0);

} else {
intent.putExtra("control", 1);
}
sendBroadcast(intent);
}
});
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("Update_Music_State");
MusicStatusReceiver musicStatusReceiver = new MusicStatusReceiver();
//动态注册activity变化的广播接收者
registerReceiver(musicStatusReceiver, intentFilter);
Intent intent = new Intent(this, MusicService.class);
startService(intent);

Intent intentMusicReceiver = new Intent("Get_Music_Control");
intentMusicReceiver.putExtra("control", 3);
sendBroadcast(intentMusicReceiver);

}
///上一首
public void preMusic(View view) {
Intent intentMusicReceiver = new Intent("Get_Music_Control");
intentMusicReceiver.putExtra("control", 4);
sendBroadcast(intentMusicReceiver);
}
///下一首
public void nextMusic(View view) {
Intent intentMusicReceiver = new Intent("Get_Music_Control");
intentMusicReceiver.putExtra("control", 5);
sendBroadcast(intentMusicReceiver);
}
///定义操作音乐的广播接收者
public class MusicStatusReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
status = intent.getIntExtra("status", 0);
currentMusic = intent.getIntExtra("currentMusic", 0);
switch (status) {
case 0:
textViewMp3Name.setText(names[currentMusic]);
textViewMp3Author.setText(authors[currentMusic]);
imageButton.setBackgroundResource(R.drawable.play32);
break;
case 1:
textViewMp3Name.setText(names[currentMusic]);
textViewMp3Author.setText(authors[currentMusic]);
imageButton.setBackgroundResource(R.drawable.play32);
break;
case 2:
imageButton.setBackgroundResource(R.drawable.pause32);
textViewMp3Name.setText(names[currentMusic]);
textViewMp3Author.setText(authors[currentMusic]);
break;
}
}
}
}


布局文件代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<ImageButton
android:id="@+id/imageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textViewMp3Author"
android:layout_alignStart="@+id/textViewMp3Author"
android:layout_below="@+id/textViewMp3Author"
android:background="@drawable/play32" />

<TextView
android:id="@+id/textViewMp3Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="歌曲名称"
android:textSize="30sp" />

<TextView
android:id="@+id/textViewMp3Author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textViewMp3Name"
android:layout_centerHorizontal="true"
android:text="作者"
android:textSize="15sp" />

<Button
android:id="@+id/button10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageButton"
android:layout_toLeftOf="@+id/textViewMp3Name"
android:layout_toStartOf="@+id/textViewMp3Name"
android:onClick="preMusic"
android:text="上一首" />

<Button
android:id="@+id/button11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageButton"
android:layout_toEndOf="@+id/textViewMp3Name"
android:layout_toRightOf="@+id/textViewMp3Name"
android:onClick="nextMusic"
android:text="下一首" />
</RelativeLayout>



[size=xx-large][color=darkred][color=red]如果想要源码,请留下邮箱。[/color][/color][/size]
[size=xx-large][color=red]Demo下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:[url]http://android.myapp.com/myapp/detail.htm?apkName=com.shandong.mm.androidstudy[/url],源码例子文档一网打尽。[/color][/size]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值