先给大家上一张效果图 对了上一曲 下一曲没有去实现
在上一张原理图
看完原理图我想大家都应该懂了 nofification如何变更的我忘了画在里面了 我就说一下吧
当我们点击notification是也是广播到services的receiver里 控制音乐播放状态然后控制notification内文字変更
nf.contentView.setTextViewText(R.id.btn_bf, "暂停");
nm.notify(0, nf);
下面是service代码
package com.example.music;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.RemoteViews;
public class MusicService extends Service {
// 用于创建通知栏布局
private RemoteViews remoteviews;
// 用于播放阴雨
private MediaPlayer mplayer;
private NotificationManager nm;
private Notification nf;
// 广播监听的动作
public static final String ACTION_BF = "ACTION_BF";
private int flag = 1; // 记录当前播放状态
private MusicServiceReceiver mr;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
// 创建notification
nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 注册receiver
mr = new MusicServiceReceiver();
IntentFilter intentfilter = new IntentFilter();
intentfilter.addAction(ACTION_BF);
registerReceiver(mr, intentfilter);
//创建notification
nf = new Notification(R.drawable.ic_launcher, "月牙湾",
System.currentTimeMillis());
remoteviews = new RemoteViews(this.getPackageName(),
R.layout.notification);
Intent intent1 = new Intent();
intent1.setAction(ACTION_BF);
intent1.putExtra("flag", 0);
PendingIntent contentIntent = PendingIntent.getBroadcast(this, 0,
intent1, 0);
remoteviews.setOnClickPendingIntent(R.id.btn_bf, contentIntent);
nf.contentView = remoteviews;
nm.notify(0, nf);
mplayer = MediaPlayer.create(this, R.raw.m);
mplayer.setLooping(true);
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
unregisterReceiver(mr);
mplayer.stop();
mplayer.release();
super.onDestroy();
}
class MusicServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
flag = (flag == 1 ? 0 : 1);
Log.v("music receiver", "receiver" + flag);
if (flag == 0) // 正在播放
{
mplayer.start();
nf.contentView.setTextViewText(R.id.btn_bf, "暂停");
}
if (flag == 1) //
{
mplayer.pause();
nf.contentView.setTextViewText(R.id.btn_bf, "播放");
}
Intent intent = new Intent("ACTION_UPDATE");
intent.putExtra("flag", flag);
// 发送广播,将被Activity组件中的BroadcastReceiver接收到
sendBroadcast(intent);
nm.notify(0, nf);
}
}
}
Activity代码
package com.example.music;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
private Button btn;
private Activityrececier receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(this);
receiver = new Activityrececier();
IntentFilter filter = new IntentFilter();
filter.addAction("ACTION_UPDATE");
registerReceiver(receiver, filter);
Intent intent=new Intent(this,MusicService.class);
startService(intent);
}
@Override
public void onClick(View arg0) {
Intent intent = new Intent("ACTION_BF");
sendBroadcast(intent);
}
@Override
protected void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}
class Activityrececier extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent intent) {
int flag=intent.getIntExtra("flag", 0);
Log.v("Activityrececier flag",flag+"");
if(flag==0)
{
btn.setText("暂停");
}
else{
btn.setText("播放");
}
}
}
}
点我下载