0
내 코드는 ... 내 수신기 (서비스를 시작하는)를 등록 및 등록 취소 (여러 번)하기 때문에 문제가 발생합니다.토글 버튼을 두 번 이상 눌러 등록/등록 해제
문제점은 다음과 같습니다. registerRceiver 및 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