18

ファイルをダウンロードするサービスがあります。ダウンロードが完了したら、 の「ダウンロードしたファイル」リストを更新したいと思いますActivityが、 が実行されている場合のみですActivity。まだ実行されていない場合は開始したくありませんActivity

Intent特別なフラグを付けて新しいものを作ることでこれができると思っていました。

どうすればこれを達成できるか、誰にも分かりますか?多分小さなコード例?

4

2 に答える 2

19

新しい BroadcastReceiver インスタンスを作成し、Activity の onResume() メソッドで次の行に沿って何かを行うことができます。

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED));

その後、myReceiver の onReceive() メソッドをオーバーライドして、必要なコンポーネントを更新する関数を呼び出します。

@Override 
public void onReceive(Context context, Intent intent) {
...
    updateViewWithData(service.getNewFileData());
...
}

Activity の onPause() メソッドで、レシーバーの登録を解除するだけです。

unregisterReceiver(myReceiver);

参考になれば幸いです。不明な点がありましたら、お気軽にお問い合わせください。

于 2009-08-24T21:12:21.507 に答える
3

これを行う良い方法は、「ダウンロードしたファイル」アクティビティをサービスにバインドすることです。サービスをバインドするときに、関数 onServiceConnected で Binder コールバックを登録します。次に、新しいデータが利用可能になるたびに、サービスはそのコールバックを呼び出すだけです。アクティビティが実行されていない場合、サービス側のコールバック リストは空になるため、アクティビティに通知されません。

このアプローチの例については、Android SDK の RemoteService.java をご覧ください。

samples\ApiDemos\src\com\example\android\apis\app\

于 2009-08-25T08:33:01.630 に答える