Android 音乐APP(五)音乐通知栏、后台播放音乐

文章介绍了如何在Android应用中通过NotificationClickReceiver处理通知栏点击事件,实现跳转到栈顶Activity而非新Activity,并详细展示了音乐播放服务中的通知管理、歌曲切换和UI更新逻辑,包括MediaPlayer的使用和通知栏视图的定制。
摘要由CSDN通过智能技术生成

/**

  • 通知点击广播接收器 跳转到栈顶的Activity ,而不是new 一个新的Activity

  • @author llw

*/

public class NotificationClickReceiver extends BroadcastReceiver {

public static final String TAG = “NotificationClickReceiver”;

@Override

public void onReceive(Context context, Intent intent) {

BLog.d(TAG,“通知栏点击”);

}

}

然后运行,运行之后点击通知栏,再看日志打印,如下所示:

在这里插入图片描述

③ 通知栏业务处理


在上面已经实现了通知栏的点击监听了,下面就要开始进行业务逻辑的处理了。先解决通知栏的点击业务处理,再解决通知栏按钮的点击处理,打开AndroidManager,注意这是之前我自己写的,不是系统的。在里面增加

/**

  • 弱引用

*/

private static WeakReference activityWeakReference;

private static Object activityUpdateLock = new Object();

/**

  • 得到当前Activity

  • @return

*/

public static Activity getCurrentActivity() {

Activity currentActivity = null;

synchronized (activityUpdateLock){

if (activityWeakReference != null) {

currentActivity = activityWeakReference.get();

}

}

return currentActivity;

}

/**

  • 设置当前Activity

  • @return

*/

public static void setCurrentActivity(Activity activity) {

synchronized (activityUpdateLock){

activityWeakReference = new WeakReference(activity);

}

}

然后进入到BasicApplication中,在onCreate中写入:

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

@Override

public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

}

@Override

public void onActivityStarted(Activity activity) {

}

@Override

public void onActivityResumed(Activity activity) {

ActivityManager.setCurrentActivity(activity);

}

@Override

public void onActivityPaused(Activity activity) {

}

@Override

public void onActivityStopped(Activity activity) {

}

@Override

public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override

public void onActivityDestroyed(Activity activity) {

}

});

通过上面得代码就可以得到栈顶的Activity,那么怎么来使用这个Activity呢,进入到NotificationClickReceiver

@Override

public void onReceive(Context context, Intent intent) {

BLog.d(TAG,“通知栏点击”);

//获取栈顶的Activity

Activity currentActivity = ActivityManager.getCurrentActivity();

intent = new Intent(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_LAUNCHER);

intent.setClass(context, currentActivity.getClass());

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

context.startActivity(intent);

}

这样就可以实现,点击通知栏时跳转到栈顶的Activity而不是新建一个Activity。

下面就是针对通知栏的信息显示做处理了,首先肯定要根据不同的音乐显示不同的歌曲信息,这一点毋庸置疑。那么这样的话就不能一开始就显示通知栏了,而是在点击播放按钮的时候显示通知栏,当切歌,或者暂停时更新这个通知栏的状态,于是就可以在MusicService中写入一个这样的方法。

/**

  • 初始化通知

*/

private void initNotification() {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值