Невозможно зарегистрировать BroadcastReceiver - PullRequest
1 голос
/ 29 апреля 2011

Я не могу зарегистрировать свой BroadcastReceiver.Всякий раз, когда я пытаюсь выполнить свой код, в logcat отображается сообщение «Невозможно зарегистрировать получателя».

Вот мой код, в котором я регистрирую получателя:

public class Preferences extends PreferenceActivity {
    private Button button;
    ListPreference lp;
    private Context context;
    private long duration;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
        context = this;
        lp = (ListPreference) findPreference("autoduration");
        final Intent intent = new Intent(context, BackService.class);
        lp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                String newSelection = newValue.toString();
                int index = lp.findIndexOfValue(newSelection);
                stopService(intent);
                if (index == 0) {
                    duration = 15000;
                } else if (index == 1) {
                   duration = 12000;
                } else if (index == 2) {
                    duration = 10000;
                } else if (index == 3) {
                    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
                    filter.addAction(Intent.ACTION_SCREEN_OFF);
                    BroadcastReceiver receiver = new ScreenReceiver();
                    registerReceiver(receiver, filter);
                }
                intent.putExtra("duration", duration);
                startService(intent);
                return true;
            }
        });
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }
}

и это мой получатель:

public class ScreenReceiver extends BroadcastReceiver {
    public static boolean screenOn = true;
    private static final String TAG = "ScreenReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
             screenOn = true;
             Log.e(TAG, "I am receiver");
        } else {
            screenOn = false;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Ваш регистрационный код может быть вызван 2 и более раз, прежде чем произойдет отмена регистрации. Вы уверены, что это не проблема?

0 голосов
/ 29 апреля 2011
...