/**
-
通知点击广播接收器 跳转到栈顶的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() {
<