2011-11-29 75 views
0

這就是我的代碼...並且由於註冊和註銷(多次)我的接收器(即啓動服務),我遇到了問題。不止一次通過切換按鈕註冊/取消註冊服務

問題是:我看到的是,「接收器」變量執行一次registerReceiver和unregisterReceiver命令...具體地說,後我註冊和註銷,然後重新註冊接收機,所述接收機只有NULL之後變爲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; 
    } 
    } 
} 

回答

0

你被明確設定receiver爲null內toggleButton.setOnClickListener和:

receiver = null; 

嘗試刪除那些行,看看它是否修復該問題

+0

確定會嘗試這樣做,但後來在代碼中的任何給定實例中,如何檢查服務是否被註冊? – Sid

+0

您可以存儲您追蹤的'boolean'。這樣您維護一個接收器實例。 – Craigy