/**
- 弱引用
*/
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() {
String channelId = “play_control”;
String channelName = “播放控制”;
int importance = NotificationManager.IMPORTANCE_HIGH;
createNotificationChannel(channelId, channelName, importance);
//点击整个通知时发送广播
Intent intent = new Intent(getApplicationContext(), NotificationClickReceiver.class);