Autore Topic: Preference checkbox and BroadcastReceiver nel MainActivity come "collegarli"  (Letto 662 volte)

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Premetto che sto scrivendo da un po per capire come finire questa applicazione in questo forum, me ne rendo conto, però ho trovato sempre persone disponibili e programmatori esperti che mi hanno sempre dato giusti consigli quindi, essendo alle prime armi, chiaramente mi viene da scrivere qui. Allora, ho creato un menù attraverso una preferences screen con dei checkbox. Il primo da la possibilità di visualizzare nella barra delle notifiche la notifica stessa da parte dell'applicazione. Solo nel momento in cui questo check box viene attivato si attivano gli altri che sono le "scelte" di ciò che voglio visualizzare (per esempio il livello di carica e la temperatura o solo uno o solo l'altro.). E qui posto l'xml
Codice (XML): [Seleziona]
<PreferenceCategory
   android:summary="Settings"
   android:title="Settings" >

    <CheckBoxPreference
       android:defaultValue="true"
       android:key="first"
       android:summary="@string/summary_show"
       android:title="@string/Show_notifications" />

    <CheckBoxPreference
       android:defaultValue="false"
       android:dependency="first"
       android:key="second"
       android:summary="@string/summary_level"
       android:title="@string/title_battery_level" />

    <CheckBoxPreference
       android:defaultValue="false"
       android:dependency="first"
       android:key="third"
       android:summary="@string/summary_temp"
       android:title="@string/title_temperature" />
</PreferenceCategory>
Ora nella mia ManActivity trovo il codice che mi estrae le varie informazioni che si trova all'interno di un BroadcastReceiver(farò vedere solo ciò che riguarda il livello di carica tanto il resto deve essere lo stesso procedimento:
Codice (Java): [Seleziona]
private BroadcastReceiver batteryInfoReceiver = new BroadcastReceiver() {

        @override
        public void onReceive(Context context, Intent intent) {        

            int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1);
                     . . .

            String[] statusbatt = {
                "Battery level: " +level+"%",
                . . .};
            ListView lvStatus = (ListView) findViewById(R.id.lv_status);
            lvStatus.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.list, statusbatt));
            info.getListViewSize(lvStatus);      
          }
};
Infine ho il codice per creare la notifica che attualmente è all'interno del broacastreceiver e rimane sempre attiva(per questo voglio creare la possibilità di visualizzarla o meno)
Codice (Java): [Seleziona]
NotificationManager notifi = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new               Notification.Builder(getApplicationContext())
.setContentTitle("Battery Informations")
.setContentText("Batteria al"+" "+level+"%")
.setSmallIcon(R.drawable.icon_small_not)
.setTicker(level+"%")
.build();

notification.flags = Notification.FLAG_ONGOING_EVENT;

Intent i = new Intent(context, MainActivity.class);

PendingIntent penInt = PendingIntent.getActivity(getApplicationContext(), 0 , i , 0);

notifi.notify(215,notification);
Quello che appunto voglio è che al check dei checkbox si attivi questa notifica e che mi visualizzi quello che l'utente decide di visualizzare in base alla scelta effettuata con i checkbox. Solo che non so proprio come strutturare il file "settings.java" che presumo sia quello che gestisca tutta sta scelta. Spero in un ultimo aiuto. Grazie.

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Preference checkbox and BroadcastReceiver nel MainActivity come "collegarli"
« Risposta #1 il: 05 Luglio 2013, 13:23:52 CEST »
0
Devi fare queste cose:

- nel receiver devi condizionare le notifiche andando a prendere i valori memorizzati nelle sharedPreferences.
Codice (Java): [Seleziona]
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.getBoolean("keystring", defValue);

- nella Activity o Fragment che gestiscono le Preferences, metti un listener per intercettare le modifche ai valori
Devi usare
Codice (Java): [Seleziona]
 OnSharedPreferenceChangeListener
Codice (Java): [Seleziona]
public class MyActivity extends PreferenceActivity implements
    OnSharedPreferenceChangeListener{

   @Override
protected void onResume() {
    super.onResume();
    // Set up a listener whenever a key changes
    getPreferenceScreen().getSharedPreferences()
            .registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    // Unregister the listener whenever a key changes
    getPreferenceScreen().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key)
{
  // Qui se viene modificata il checkbox sulle notifiche agisci opportunamente
}

}
 

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Re:Preference checkbox and BroadcastReceiver nel MainActivity come "collegarli"
« Risposta #2 il: 05 Luglio 2013, 14:13:08 CEST »
0
Devi fare queste cose:

- nel receiver devi condizionare le notifiche andando a prendere i valori memorizzati nelle sharedPreferences.
Codice (Java): [Seleziona]
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.getBoolean("keystring", defValue);

- nella Activity o Fragment che gestiscono le Preferences, metti un listener per intercettare le modifche ai valori
Devi usare
Codice (Java): [Seleziona]
 OnSharedPreferenceChangeListener
Codice (Java): [Seleziona]
public class MyActivity extends PreferenceActivity implements
    OnSharedPreferenceChangeListener{

   @Override
protected void onResume() {
    super.onResume();
    // Set up a listener whenever a key changes
    getPreferenceScreen().getSharedPreferences()
            .registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    // Unregister the listener whenever a key changes
    getPreferenceScreen().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key)
{
  // Qui se viene modificata il checkbox sulle notifiche agisci opportunamente
}

}
 
E' un gran casino..argh..Cambia molto se semplicemente faccio un checkbox unico con se attivo faccio partire la notifica e se disattivo invece no?