2013-02-05 14 views
5

Desidero avviare e interrompere un ricevitore di trasmissione da due pulsanti. Ho scritto il codice per questo in due ascoltatori di pulsanti.Avvio e arresto del ricevitore di trasmissione

Il codice è il seguente: -

In startButton ho scritto il codice per la registrazione del ricevitore come segue

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

In un pulsante di arresto che ho scritto la richiesta di ricevitore fermata come

stopCallBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      stopCallBtn.setVisibility(View.INVISIBLE); 
      startCallBtn.setVisibility(View.VISIBLE); 
      stopService(new Intent(MainActivity.this, SpeakOut.class)); 
      FileOutputStream fos; 

      //Unregister sms receivers 
      unregisterReceiver(callReceiver); 
      System.out.println("Unregistered Call Broadcast Receiver"); 
     } 
    }); 

ancora il listener chiama quando riceve una nuova chiamata

+0

hai messo questo ricevitore anche in Manifest.xml? –

risposta

3

in manifesta

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

principale Attività

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

Si può provare questo codice per enable e disableBroadcastReceiver ..Io speranza che questo vi aiuterà ..

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

Marchio certo che chiami unregisterReceiver() di sa me receiver oggetto su cui è stato chiamato registerReceiver(). Se stai creando un nuovo oggetto per lo stesso ricevitore prima di rilasciarlo, allora il vecchio oggetto ricevitore che è registrato non può più essere annullato poiché hai assegnato un nuovo blocco di memoria ad esso.

Ad esempio, fare questo:

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

receiver = new MyBraodCastReceiver(); 
Problemi correlati