2014-10-31 15 views
8

Umieściłem widżet przełącznika w głównej aktywności, mam również drugą czynność, która rozszerza BroadcastReceiver. Chcę uzyskać stan boolowski widżetu przełącznika w drugiej aktywności.Jak uzyskać wartość przełączania w systemie Android?

Gdybym wpisać

Switch s = (Switch) findViewById(R.id.switch1); 

mówi findViewById jest niezdefiniowana dla typu SecondActivity. Problem polega na tym, że Android nie pozwala mi uzyskać wartości przełącznika w klasie rozszerzającej odbiornik Broadcast.

Chcę poznać stan przełącznika, tj. Czy przełącznik jest włączony, czy wyłączony, ale w drugim działaniu. Jak mogę to osiągnąć?

+0

Możliwy duplikat: http://stackoverflow.com/a/10577852/2777098 –

+0

@IsabelHM Mówiłem już, że Android nie robi” t rozpoznaje findViewById w klasie, która rozszerza odbiornik Broadcast. Czytałem to pytanie, to jest zupełnie inne. –

+2

Twój BroadcastReceiver nie ma interfejsu użytkownika (a więc nie ma przełącznika), więc ma sens, że nie pozwoliłoby ci 'findViewById()'. –

Odpowiedz

10

Wywołanie findViewById() z działania może tylko uzyskać dostęp do widoków, które są częścią układu tego działania. Nie możesz go użyć do przeszukiwania układu jakiejkolwiek innej aktywności.

W zależności od aplikacji projektowania, można użyć jednego z nich:

1) wysłać wartość Przełącz do SecondActivity poprzez zamiarem dodatkowym

W działalność:

Intent mIntent = new Intent(this, SecondActivity.class); 
mIntent.putExtra("switch", s.isChecked()); 
startActivity(mIntent); 

W SecondActivity:

boolean isChecked = getIntent().getBooleanExtra("switch", false); 

2) Zapisać wartość preferencji w sprawie zmian i czytaj preferencje w SecondActivity

W działalność:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor e = settings.edit(); 
e.putBoolean("switch", s.isChecked()); 
e.commit(); 

W SecondActivity:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
boolean isChecked = settings.getBoolean("switch", false); 
+0

Jak dodać wartość boolowską do preferencji i pobierania w SecondActivity. Czy możesz wysłać kod? –

+0

Otrzymuję błąd w SecondActivity. Jest to błąd: - "Metoda getDefaultSharedPreferences (Context) w typie PreferenceManager nie ma zastosowania do argumentów (SecondActivity)". –

+0

Aktualnie tworzę aplikację, która blokuje połączenie przychodzące, gdy przełącznik jest włączony. Napisałem pytanie z pełnym kodem. Proszę spojrzeć: - http://stackoverflow.com/questions/26673533/how-to-block-incoming-call-when-switch-widget-is-on –

1

Aby uzyskać dostęp do wartości swi tch, należy wykonać następujące czynności:

((Switch) findViewById(R.id.switch_id)).isChecked(); 

ALE w kontekście BroadcastReceiver, nie masz naprawdę dostęp do układu, dlatego nie można uzyskać dostępu do przełącznika. Musisz wykonać to TYLKO w ramach działania, które nadyma układ, który ma przełącznik.

Być może program BroadcastReceiver został zarejestrowany programowo w ramach działania, jest to jedyny sposób, w jaki widzę tę kombinację koncepcji.

+0

Aktualnie tworzę aplikację, która blokuje połączenie przychodzące, gdy przełącznik jest włączony. Napisałem pytanie z pełnym kodem. Proszę spojrzeć: - http://stackoverflow.com/questions/26673533/how-to-block-incoming-call-when-switch-widget-is-on –

0

Możesz zapisać wartość w Preferencjach. Poniżej klasie będzie łatwo można zrobić, aby zapisać dane i sprowadzaniu go od preferencji

public class SessionManager { 

    private SharedPreferences pref; 
    private static SessionManager sessionManager; 




    public static SessionManager getInstance(Context context) { 
     if(sessionManager == null){ 
      sessionManager = new SessionManager(context); 
     } 
     return sessionManager; 
    } 


    public SessionManager(Context context) { 
     String PREF_NAME = context.getResources().getString(R.string.app_name); 
     this.pref = context.getSharedPreferences(PREF_NAME,Context.MODE_PRIVATE); 

    } 


    /** 
    * Getting value for key from shared Preferences 
    * 
    * @param key   key for which we need to get Value 
    * @param defaultValue default value to be returned if key is not exits 
    * @return It will return value of key if exist and defaultValue otherwise 
    */ 
    public String getValueFromKey(String key, String defaultValue) { 
     if (pref.containsKey(key)) { 
      return pref.getString(key, defaultValue); 
     } else { 
      return defaultValue; 
     } 
    } 


    /** 
    * Setting value for key from shared Preferences 
    * 
    * @param key key for which we need to get Value 
    * @param value value for the key 
    */ 
    public void setValueFromKey(String key, String value) { 
     pref.putString(key, value).apply(); 
    } 


    /** 
    * Setting value for key from shared Preferences 
    * 
    * @param key key for which we need to get Value 
    * @param value value for the key 
    */ 
    public void setFlagFromKey(String key, boolean value) { 
     pref.putBoolean(key, value).apply(); 
    } 


    /** 
    * To get Flag from sharedPreferences 
    * 
    * @param key key of flag to get 
    * @return flag value for key if exist. false if not key not exist. 
    */ 
    public boolean getFlagFromKey(String key) { 
     return pref.containsKey(key) && pref.getBoolean(key, false); 
    } 

} 
Powiązane problemy