2012-04-24 3 views
0

サービスで何らかのアクションが実行された後、UI(アクティビティ)を更新しようとしています。これは非常に単純な例ですが、私にとってはうまくいかないようです。私はここで何が欠けていますか?アクティビティコミュニケーションへのサービス

ExampleService:

public class ExampleService extends IntentService{ 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     notifyActivity(); 
    } 

    private void notifyActivity() { 
     Intent broadcast = new Intent(this, ExampleActivity.class); 
     sendBroadcast(broadcast); 
    } 
    } 

ExampleActivity:あなたは匿名の動的な受信機にそのようにブロードキャストを送信することはできません

public class ExampleActivity extends ListActivity { 
     private BroadcastReceiver receiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(getApplicationContext(), "received", Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     unregisterReceiver(receiver); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     IntentFilter filter = new IntentFilter(); 
     registerReceiver(receiver, filter); 
    } 
} 

答えて

1

Intentにアクション文字列を定義し、そのアクション文字列をIntentFilterに使用する必要があります。

パフォーマンスを向上させるために、このシナリオではLocalBroadcastManagerを使用することを検討してください。これを実証するHere is a sample project

+0

LocalBroadcastManagerは互換パッケージで利用できますか?私がダウンロードしたv4ではそれを見つけることができません。 – karruma

+0

インテントのアクション文字列に関しては、ルールがありますか、または「example.action.string」を置くことはできますか? – karruma

+0

@karruma: "LocalBroadcastManagerは互換パッケージで利用できますか?" - はい。 "インテントのアクション文字列に関しては、ルールはありますか?" - LocalBroadcastManager'では、必要なものを使用します。 「実際の」ブロードキャストの場合は、文字列を一意にする必要があります。そのため、通常、アプリケーションのパッケージのプレフィックスが付きます。 – CommonsWare

関連する問題