我从我instationate我的服务ScreenReceiver
类。 我怎样才能通知服务时OnRecieve
的方法ScreenReceiver
被触发? 我想要update()
时,“onRecieve`被trigerred被调用的方法。
StateChecker.java(草案):
public class StateChecker extends Service {
//...
// setting TimeAlarm
TimeAlarm mTimeAlarm = new TimeAlarm();
mTimeAlarm.SetAlarm(this.getApplicationContext(),10);
public void update() {
//update sth
}
//...
}
ScreenReceiver.java(草案):
public class ScreenReceiver extends BroadcastReceiver {
//...
@Override
public void onReceive(Context context, Intent intent) {
//...
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
}
//...
}
你也许可以做这样的事情:
创建一个新的Intent
,以您的Service
从Receiver
,通过关闭额外的,然后覆盖onStartCommand()
的服务。 检查目的的额外的,如果额外存在,调用update()
。
另外,如果你用this
来代替this.getApplicationContext()
它很可能是你的Receiver
的onReceive()
Context
参数将是服务。 然后,你可以只投。
例如
if (context instanceof StateChecker)
((StateChecker) context).update();
定义一个接口,并使用一个回调,让活动知道,一个屏幕事件已收到。
public Interface ScreenReceiverListener {
void onScreenReceive(int arg1, string arg2); ..<----add arguments you want to pass back
}
在你ScreenReceiver类
ArrayList<ScreenReceiveListener > listeners = new ArrayList<ScreenReceiveListener >();
...
public void setScreenReceiveListener(ScreenReceiveListener listener){
listeners.add(listener);
}
在你的onReceive
for (ScreenReceiveListener listener:listeners){
listener.onSCreenReceive(arg1, arg2);
}
在您的服务:
public class StateChecker extends Service implements ScreenReceiveListener {
...
screenReceiver.setScreenReceiveListener(this);
...
}
public void onScreenReceive(int arg1, string arg2){
// do whatever you need to do
}
所有的记忆,所以请原谅错别字,你应该加入removeScreenReceiveistener并检查你不setScreenReceiveListener添加相同的听众两次提高ScreenReceiver类。
注意。 由于您使用的接口,任何类(不只是一个服务)可以实现,所以你可以在你的应用的任何更新。 该ScreenReceiver类并不知道也不关心。 它只是调用监听器,如果有任何登记。