//打开权限
mVersionField.setAccessible(true);
//得到的就是mVersion在当前类中的值
Object o = mVersionField.get(this);
//把它的值给mLastVersion
mLastVersionField.set(observerWrapper,o);
}
}
}
这里面的代码是我在第一次听课的过程中一步一步写的,整体的思路并不是我想的,也可以说是学习了。上面的代码也都有注释,就不过多解释了,下面看怎么去用,首先通过通知栏控制Activity,也就是页面,下面我就都用页面二字代替Activity了。说白了其中的思路就是当我点击了通知栏上的某一个按钮的时候,服务会知道这个事情,因为之前注册了广播,但是页面怎么知道这个事情呢,所以其实就是要让服务去告诉页面,我当前点击了通知栏上某一个按钮。然后页面就去做出相应的操作,在这里服务是被观察者,而页面是观察者,所以我们可以在服务中安插一个卧底,让它告诉我们通知栏干了啥事。这么一想思路就很清晰了,下面来看具体的实现。
进入MusicService中,
/**
- 通知栏控制Activity页面UI
*/
private LiveDataBus.BusMutableLiveData activityLiveData;
创建对象,传入String就代表接收的也是String,这里你可以传递任何类型的数据。
然后要在onCreate进行实例化。
activityLiveData = LiveDataBus.getInstance().with(“activity_control”, String.class);
这样,卧底就安插好了,下面就是要告诉卧底什么时候要给页面传递消息了。
首先当然是播放了,注意上图中红色方框中的代码,postValue就是发送消息,PLAY是在Constant中定义的全局变量。就是告诉页面,我当前的音乐开始播放了。
当我点击通知的播放按钮时回调用这个方法,那么在这个方法里面首先控制了通知栏本身的按钮UI,于是我再加上对页面的控制,就是一举两得。
关闭通知栏的时候也要告诉页面,这个时候页面上的UI也要做出改变,
下一首和上一首都要通知页面,到这里该告诉页面的信息都说了,再说的话卧底可能就要暴露了,不太好吧。既然卧底的消息都发出去了,那么页面怎么做出相应的改变呢?进入MainActivity。
/*