Это мой код ... и у меня проблема из-за регистрации и отмены регистрации (несколько раз) моего получателя (который запускает службу).
проблема в том, что у меня естьвидно, что переменная '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;
}
}
}