зарегистрировать / отменить регистрацию услуги с помощью кнопки переключения более одного раза - PullRequest
0 голосов
/ 29 ноября 2011

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

проблема в том, что у меня естьвидно, что переменная 'receive' становится 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;
    }
    }
}

1 Ответ

0 голосов
/ 29 ноября 2011

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

receiver = null;

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

...