2011-11-05 6 views
8

Vì vậy, tôi đang cố gắng để có được một xử lý trên BroadcastReceivers và Intent bộ lọc. Tôi có một hộp thoại tùy chỉnh mà tôi tạo trong MyActivity. Trong hộp thoại, tôi có một nút. Khi nút được nhấp, tôi muốn gửi một chương trình phát sóng mà bộ thu của MyActivity sẽ nhận. Dưới đây là những gì tôi có ngay bây giờ:Làm cách nào để gửiBroadcast (intent) từ myDialog và nhận trong 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> 

Khi tôi nhấn button1, ứng dụng gặp sự cố. Bất cứ ai có thể dẫn tôi đi đúng hướng không?

Trả lời

12

trong MyActivity làm điều gì đó như thế này:

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); 
} 

và để gọi phát sóng

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

Bạn đá. Cảm ơn vì tiền hỗ trợ! – Brianide

+0

Hey, tôi đã có nó làm việc, nhưng bây giờ nó chỉ hoạt động hiếm khi và rời rạc. Bạn có biết bất cứ điều gì có thể can thiệp vào chương trình phát sóng không? – Brianide

+0

Vì vậy, bây giờ tôi đang cố gắng để trả lại xung quanh một vài chương trình phát sóng và thu, và nó chỉ hoạt động hiếm khi. Tôi muốn chương trình phát sóng của Dialog được Activity1 chọn. Activity1 thực hiện một số nội dung và sau đó gửi một chương trình phát sóng cho Activity2 để nhận. Tuy nhiên, khi tôi thử điều này, cả Activity đều không được phát sóng. Tôi nghĩ rằng tôi sẽ đăng mã trong một câu hỏi mới. – Brianide

0

Có thể sẽ dễ dàng hơn khi đăng ký người nhận của bạn bằng mã trong phương thức onResume của hoạt động của bạn (và hủy đăng ký ở chế độ onPause).

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

Vì vậy, đoạn này sẽ tất cả đi trong onResume, và tôi sẽ cần một unregister tương ứng trong onPause? – Brianide

+0

Nó treo khi MyActivity tải khi tôi thiết lập nó trên OnResume và onPause. – Brianide

+0

Theo dõi ngăn xếp? Phương pháp này hoạt động tốt. Tôi sử dụng nó trong hầu hết các ứng dụng của mình. –