Domanda

Non riesco a registrare il mio BroadcastReceiver. Ogni volta che provo ad eseguire il mio codice sua mostra "Impossibile registrare ricevente" in logcat.

Ecco il mio codice in cui sto registrando il mio ricevitore:

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);
    }
}

e questo è il mio ricevitore:

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;
        }
    }
}
È stato utile?

Soluzione

Il codice registro potrebbe essere invocato 2 e più volte prima di annullare la registrazione accadrà. Sei sicuro che non è il problema?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top