0

これがシナリオです。ACTION_PHONE_STATE_CHANGEDを​​リッスンするBroadcastReceiverがあり、それが変更されるとサービスを開始します。このサービスはCallLogにクエリを作成し、何かが増加したときにMainActivityのいくつかのProgressBarに表示したいのですが、どうすればよいですか?

MainActivityとServiceをサブクラス化するApplicationクラスを作成することを考えていましたが、対応する参照を持つことができましたか、それとも間違っていますか?

前もって感謝します

4

1 に答える 1

2

いくつかの可能性があります:

  1. Service は brodcast( sendBroadcast ) を送信できます。アクティビティは、サービスに実装されている broacastReceiver を登録するだけで済みます。そんな感じ:

あなたのサービス:

 Intent intent=new Intent(getApplicationContext(),WebResults.class);
 intent.setAction("com.toxy.LOAD_URL");
 intent.putExtra("url",uri.toString());
 sendBroadcast(intent);

あなたの活動:

 private class Receiver extends BroadcastReceiver {

 @Override
 public void onReceive(Context arg0, Intent arg1) {

     String url = arg1.getExtras().getString("url");
     WebView webview =(WebView)findViewById(R.id.webView);
     webview.loadUrl(url);
 }

このリンクはあなたを助けることができます: http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html

2 番目の方法は、サービスにリスナーを登録し、サービスでそのリスナーに通知することです。

あなたのサービスで:

void onSomethingHappened()
{
     activityListener.notifyProgressBar();
}

void subscribe(YourInterface listener)
{
     actibityListener =  listener;
}

あなたの活動では、サービスを開始した後:

service.subscribe(this); 

ただし、より良い解決策を得るには、サービスの実装 (タイプ) を考慮する必要があります。

AndroidServiceに関するこのリンクは役に立ちます。

于 2013-02-24T23:08:32.550 に答える