notification+service+broadcastreceiver实现简单的音乐播放器

来源:互联网 发布:双声道音乐软件 编辑:程序博客网 时间:2024/05/21 22:33

先给大家上一张效果图大笑  对了上一曲 下一曲没有去实现


在上一张原理图


看完原理图我想大家都应该懂了 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;@Overridepublic IBinder onBind(Intent arg0) {return null;}@Overridepublic void onCreate() {// 创建notificationnm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);// 注册receivermr = new MusicServiceReceiver();IntentFilter intentfilter = new IntentFilter();intentfilter.addAction(ACTION_BF);registerReceiver(mr, intentfilter);//创建notificationnf = 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();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {unregisterReceiver(mr);mplayer.stop();mplayer.release();super.onDestroy();}class MusicServiceReceiver extends BroadcastReceiver {@Overridepublic 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);    }@Overridepublic void onClick(View arg0) {   Intent intent = new Intent("ACTION_BF");   sendBroadcast(intent);}    @Override    protected void onDestroy() {    unregisterReceiver(receiver);    super.onDestroy();    }    class Activityrececier extends BroadcastReceiver{@Overridepublic 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("播放");}}        }       }

点我下载

0 0
原创粉丝点击