1

私はScreenReceiverクラスを派遣するサービスを持っています。OnRecieveメソッドScreenReceiverがトリガーされたときにサービスに通知するにはどうすればよいですか?update()'onRecieve`がトリガーされたときにメソッドが呼び出されるようにしたいと思います。

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);
   }
    //...
}
4

2 に答える 2

1

あなたはおそらくこのようなことをすることができます:

から新しいものを作成し、エクストラを渡しIntentServiceから、サービスでオーバーライドします。Extraのインテントを確認し、Extraが存在する場合は、を呼び出します。ReceiveronStartCommand()update()

また、thisの代わりにを使用すると、のパラメータがサービスになるthis.getApplicationContext()可能性が非常に高くなります。その後、キャストすることができます。ReceiveronReceive() Context

例えば

if (context instanceof StateChecker)
  ((StateChecker) context).update();
于 2013-01-26T18:54:43.410 に答える
1

インターフェイスを定義し、コールバックを使用して、画面イベントが受信されたことをアクティビティに通知します。

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に同じリスナーを2回追加しないことを確認して、ScreenReceiverクラスを改善する必要があります。

ノート。インターフェースを使用するため、(サービスだけでなく)どのクラスでもインターフェースを実装できるため、アプリのどこからでも更新できます。ScreenReceiverクラスは、認識も気にもしません。登録されている場合は、リスナーを呼び出すだけです。

于 2013-01-26T18:59:08.470 に答える