2011-11-05 18 views
8

したがって、私はBroadcastReceiversとIntentフィルタのハンドルを取得しようとしています。 MyActivityで作成したカスタムダイアログがあります。ダイアログで、私はボタンを持っています。ボタンがクリックされると、MyActivityの受信者がピックアップするブロードキャストを送信したいと思います。ここで私が今持っているものです。myDialogからブロードキャスト(インテント)を送信してmyActivityで受信するにはどうすればよいですか?

//MyActivity.java 
class myActivity extends Activity { 

    //MyDialog dialog initialized in onCreate 

    ... 

    private class MyReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      //toast "Broadcast received" 
     } 
    } 
} 

//MyDialog.java 
class MyDialog extends Dialog { 

    //m_context = incoming context from MyActivity 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     Button button1 = (Button)findViewById(R.id.button1); 
     button1.setOnClickListener(new View.OnCLickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(); 
       intent.setAction("android.intent.action.RUN"); 
       m_context.sendBroadcast(intent); 
      } 

     }); 

    } 

} 


//AndroidManifest.xml 
<activity android:name=".MyActivity" /> 
<receiver android:name="MyReceiver" android:enabled="true"> 
    <intent-filter > 
     <action android:name="android.intent.action.RUN"/> 
    </intent-filter> 
</receiver> 

私は、アプリのクラッシュをButton1を押すと。誰かが正しい方向に私を導くことができますか?

答えて

12

このような何か:

private BroadcastReceiver _refreshReceiver = new MyReceiver(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    IntentFilter filter = new IntentFilter("SOMEACTION"); 
    this.registerReceiver(_refreshReceiver, filter); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    this.unregisterReceiver(this._refreshReceiver); 
} 

を放送

Intent in = new Intent("SOMEACTION"); 
sendBroadcast(in); 
+0

あなたは揺れます。ヒントをありがとう! – Brianide

+0

ねえ、私はそれが働いていたが、今はあまり散発的ではない。あなたは放送を妨げることがあるものは何を知っていますか? – Brianide

+0

これで、私はいくつかの放送と受信機を跳ね返そうとしています。私は、Dialogの放送がActivity1によって選ばれることを望みます。 Activity1はいくつかのことをしてから、Activity2のブロードキャストを送ってピックアップします。しかし、私がこれを試しても、どちらのアクティビティもその放送を受信して​​いません。私は、新しい質問にコードを投稿すると思います。 – Brianide

0

受信者をアクティビティのonResumeメソッド(およびonPauseのunregiser)でコードに登録する方がはるかに簡単です。 MyActivityで

BroadcastReceiver rec = new BroadcastReceiver() 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //Do stuff 
    } 
}; 
IntentFilter filter = new IntentFilter("android.intent.action.RUN"); 

registerReceiver(rec, filter); 
+0

を起動するので、この塊は、すべてのonResumeに行くだろう、と私は、対応する登録解除を必要とするだろうonPause? – Brianide

+0

OnResumeとonPauseにMyActivityをロードするとクラッシュします。 – Brianide

+0

スタックトレース?この方法はうまくいきます。私はほとんどのアプリで使っています。 –

関連する問題