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

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


在上一张原理图


看完原理图我想大家都应该懂了 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("播放");
			}
			
		}
    	
    }
   
    
}

点我下载

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值