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;
}
}
}
確定會嘗試這樣做,但後來在代碼中的任何給定實例中,如何檢查服務是否被註冊? – Sid
您可以存儲您追蹤的'boolean'。這樣您維護一個接收器實例。 – Craigy