зарегистрировать/отменить регистрацию службы с помощью переключателя более одного раза

Вот что такое мой код... и у меня возникает проблема из-за регистрации и отмены регистрации (несколько раз) моего приемника (который запускает службу).

проблема в том, что: я видел, что переменная «получатель» становится NULL после однократного выполнения команд registerReceiver и unregisterReceiver... в частности, после того, как я зарегистрирую и отменю регистрацию, а затем снова зарегистрирую получателя, получатель имеет только NULL, и, следовательно, в то время как при повторной отмене регистрации выдает ошибку! так что в основном мое приложение не может снова зарегистрировать Receiver после его отмены. Почему это проблема?

public class startScreen  extends Activity {
    /** Called when the activity is first created. */

    private BroadcastReceiver receiver=new BroadcastReceiver(){

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent serviceIntent = new Intent();
        serviceIntent.setAction("com.example.MyService");
        context.startService(serviceIntent);

    }

    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.initial);

       final IntentFilter filter = new IntentFilter();
        filter.addAction("android.net.wifi.STATE_CHANGE");



      Button button = (Button) findViewById(R.id.button1);
      final ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton1);
      try
    {
                 ... some code...             
      if(bool == true)
      {
        toggleButton.setChecked(true);
        this.registerReceiver(receiver, filter);
      }
      else
          toggleButton.setChecked(false);
    }catch(Exception e) {
           Log.e("Error", "Database", e);
          } finally {
                         ...
          }

      toggleButton.setOnClickListener(new OnClickListener() {        
          public void onClick(View v) {
              if((toggleButton.isChecked()))
              {
                  getBaseContext().registerReceiver(receiver, filter);

              }
              else
              {
                  if (receiver != null){
                      getBaseContext().unregisterReceiver(receiver);
                         receiver = null;
            }

              }
          }
    });
    }

    @Override
    protected void onResume(){
        super.onResume();
              if(bool == true)
              {
               if(receiver == null)
                   this.registerReceiver(receiver, filter);
              }                       
    }
    @Override
    protected void onPause(){
        super.onPause();
    if (receiver != null){
        this.unregisterReceiver(receiver);
        receiver = null;
    }
    }
}

person Sid    schedule 29.11.2011    source источник


Ответы (1)


Вы явно устанавливаете receiver в null внутри toggleButton.setOnClickListener и в onPause:

receiver = null;

Попробуйте удалить эти строки и посмотрите, решит ли это проблему.

person skynet    schedule 29.11.2011
comment
Хорошо, я попытаюсь это сделать, но как тогда проверить, зарегистрирована служба или нет, в любой момент кода? - person Sid; 29.11.2011
comment
Вместо этого вы можете сохранить boolean, который вы отслеживаете. Таким образом вы поддерживаете экземпляр получателя. - person skynet; 29.11.2011