2013-02-05 22 views
5

Bir yayın alıcısını iki düğmeden başlatmak ve durdurmak istiyorum. Bu kodu iki düğme dinleyicisine yazmıştım.Yayın alıcısını başlat ve durdur

StartButton yılında ben

olarak durdurma alıcı için çağrı yazdım bir durdurma düğmesini

 startCallBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      startCallBtn.setVisibility(View.INVISIBLE); 
      stopCallBtn.setVisibility(View.VISIBLE); 


      //register call receiver. 
      registerReceiver(callReceiver, new IntentFilter(
      "android.intent.action.CALL")); 
      System.out.println("Registered Call Receiver Perfectly"); 
     } 
    }); 

aşağıdaki gibi alıcıyı tescili için kod yazdım - şu şekildedir:

kodudur

hala yeni bir çağrı alındığında dinleyiciyi arıyor

+0

Eğer Manifest.xml de bu alıcıyı koydun mu? –

cevap

3

tezahür

<receiver android:name="your receiver name"> 

ana Etkinliğinizde

BroadcastReceiver br = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.w("Check", "Inside On Receiver"); 
      Toast.makeText(getApplicationContext(), "received", Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(BROADCAST_ACTION); 
     filter.addCategory(Intent.CATEGORY_DEFAULT); 
     registerReceiver(br, filter); 

    } 

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

Sen .. enable ve disableBroadcastReceiver ..Bu size yardımcı olacaktır umut için

public void enableBroadcastReceiver(View view) 
{ 

    ComponentName receiver = new ComponentName(this, AlarmManagerBroadcastReceiver.class); 
    PackageManager pm = this.getPackageManager(); 

    pm.setComponentEnabledSetting(receiver, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
      PackageManager.DONT_KILL_APP); 
    Toast.makeText(this, "Enabled broadcast receiver", Toast.LENGTH_SHORT).show(); 
    } 
    /** 
    * This method disables the Broadcast receiver registered in the AndroidManifest file. 
    * @param view 
    */ 
    public void disableBroadcastReceiver(View view){ 
    ComponentName receiver = new ComponentName(this, AlarmManagerBroadcastReceiver.class); 
    PackageManager pm = this.getPackageManager(); 
     pm.setComponentEnabledSetting(receiver, 
      PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
      PackageManager.DONT_KILL_APP); 
    Toast.makeText(this, "Disabled broadcst receiver", Toast.LENGTH_SHORT).show(); 
    } 
1

Make bu kodu deneyebilirsiniz unregisterReceiver() ve registerReceiver() aradığınız receiver nesnesi. Aynı alıcı için serbest bırakmadan önce yeni bir nesne oluşturuyorsanız, kayıtlı olan eski alıcı nesnesi, yeni bellek bloğu ayırdığınız için artık kaydedilmez.

Örneğin, bu yapın:

MyBroadcastReceiver receiver = new MyBroadCastReceiver(); 
registerReceiver(receiver); 
unregisterReceiver(receiver); 

receiver = new MyBraodCastReceiver();