Autore Topic: Inviare notifiche push in base a data e ora salvati in sqlite  (Letto 972 volte)

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Inviare notifiche push in base a data e ora salvati in sqlite
« il: 18 Novembre 2013, 18:46:48 CET »
0
Ciao a tutti!
Pongo una domanda ai più esperti (premesso che sono alle prime armi); spero di riuscire a spiegarmi. Allora: ho seguito un tutorial in sqlite per salvare i dati in una tabella e richiamarli in una custom listview e da qui mi è venuta una mezza idea per creare una semplice app che permetta all'utente di memorizzare tutti gli appuntamenti giornalieri; insomma una sorta di "agenda-promemoria". Dopo aver creato la pagina impostazioni inserendo la possibilità di attivare o memo le notifiche e di selezionare il preavviso di ricezione della notifica rispetto all'ora memorizzata nel database, chiedo: è possibile richiamare la data e l'ora salvata, creare la notifica ed inviarla in base ai minuti di preavviso selezionati?
Grazie.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Inviare notifiche push in base a data e ora salvati in sqlite
« Risposta #1 il: 18 Novembre 2013, 18:55:55 CET »
0
Per ogni data-ora puoi impostare un AlarmManager, alla cui scadenza visualizzi una Notification.

Use Android's AlarmManager to schedule an event - TechRepublic

Android Notifications - Tutorial
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Re:Inviare notifiche push in base a data e ora salvati in sqlite
« Risposta #2 il: 22 Novembre 2013, 19:59:24 CET »
0
Allora dopo aver seguito il consiglio mi trovo difronte ad un nuovo problemino....
ho provato a cercare su google un soluzione ma non ho trovato nulla...
Nella mia settings activity ho messo un checkbox che se attivato attiva una listpreference che permette all'utente di scegliere ogni quanto tempo ricevere una notifica

la pagina settings:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory
       android:title="Impostazioni Applicazione"
       android:key="settingsApp">
       
        <CheckBoxPreference
           android:key="cbPrefs"
           android:title="Notifiche"
           android:summary="Abilita la ricezione dei preavvisi"
           android:defaultValue="false"/>
       
        <ListPreference
           android:title="Intervallo Notifiche"
           android:summary="Seleziona intervallo notifiche"
           android:key="listaOpzioni"
           android:dependency="cbPrefs"
           android:entries="@array/opzioni_entries"
           android:entryValues="@array/opzioni_values"
           android:defaultValue="1800000"/>
       
    </PreferenceCategory>
   

</PreferenceScreen>

l'arraylist:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="opzioni_entries">
        <item>30 minuti</item>
        <item>1 ora</item>
        <item>2 ore </item>
        <item>3 ore</item>
        <item>1 volta al giorno</item>
    </string-array>
    <string-array name="opzioni_values">
        <item>1800000</item>
        <item>3600000</item>
        <item>7200000</item>
        <item>10800000</item>
        <item>43200000</item>
    </string-array>
   
</resources>

l'activity SettingsActivity
Codice (Java): [Seleziona]
import android.app.ActionBar;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.view.MenuItem;

public class SettingsActivity extends PreferenceActivity {
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           addPreferencesFromResource(R.xml.settings);
           setTitle("Impostazioni");
           
           //setto la listpreference e checkboxpreference
           ListPreference listaOpzioni = (ListPreference) findPreference("listaOpzioni");
           CheckBoxPreference cbPrefs = (CheckBoxPreference) findPreference("cbPrefs");
           
           //imposto la descrizione in base all'item selezionato
           listaOpzioni.setSummary(listaOpzioni.getEntry());
           
           listaOpzioni.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
               
                @Override
                public boolean onPreferenceChange(Preference preference, Object o) {
                        // TODO Auto-generated method stub
                        preference.setSummary(o.toString());
                        return true;
                }
        });
           
           
           //Abilito il logo della actionbar
       ActionBar actionBar = getActionBar();
       actionBar.setDisplayHomeAsUpEnabled(true);
        }
       
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
                 
        case android.R.id.home:
                // quando clicco sul logo l'activity termina
                finish();
                return true;
                }
        return super.onOptionsItemSelected(item);
        }

}

Nell'altra classe che permette l'avvio delle notifiche vorrei fare in modo che se il checkbox è attivo la notifica arrivi in base all'item slezionato:
(premesso che il codice per la notifica sia giusto, credo che l'errore sia nel modo in cui setto l'if della listpreference:
Codice (Java): [Seleziona]
//richiamo le preferenze
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
    boolean cbPrefs = settings.getBoolean("cbPrefs", false);
    String listaOpzioni = settings.getString("listaOpzioni", "1800000");
   
    if(settings.getBoolean("cbPrefs", true)) {
       
        if(settings.getString("listaOpzioni", "") == "1800000") {
                // ripeti notifica ogni 30 minuti
            AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1800000, pi);
            Toast.makeText(this, "Ricezione notifiche ogni 30 minuti", Toast.LENGTH_LONG).show();
            Log.d(TAG, "onStart");
            Editor prefsEditor = settings.edit();
                prefsEditor.commit();
           
        } else if (settings.getString("listaOpzioni", "") == "3600000") {
                // ripeti notifica ogni ora
            AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 3600000, pi);
            Toast.makeText(this, "Ricezione notifiche ogni ora", Toast.LENGTH_LONG).show();
            Log.d(TAG, "onStart");
            Editor prefsEditor = settings.edit();
                prefsEditor.commit();
           
        } else if(settings.getString("listaOpzioni", "") == "7200000") {
                // ripeti notifica ogni 2 ore
            AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 7200000, pi);
            Toast.makeText(this, "Ricezione notifiche ogni 2 ore", Toast.LENGTH_LONG).show();
            Log.d(TAG, "onStart");
            Editor prefsEditor = settings.edit();
                prefsEditor.commit();
           
        } else if(settings.getString("listaOpzioni", "") == "10800000") {
                // ripeti notifica ogni 3 ore
            AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10800000, pi);
            Toast.makeText(this, "Ricezione notifiche ogni 3 ore", Toast.LENGTH_LONG).show();
            Log.d(TAG, "onStart");
            Editor prefsEditor = settings.edit();
                prefsEditor.commit();
           
        } else if(settings.getString("listaOpzioni", "") == "43200000") {
                // ripeti notifica 1 volta al giorno
            AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 43200000, pi);
            Toast.makeText(this, "Ricezione 1 notifica al giorno", Toast.LENGTH_LONG).show();
            Log.d(TAG, "onStart");
            Editor prefsEditor = settings.edit();
                prefsEditor.commit();
        }
       
    } else {
       
        Toast.makeText(this, "Servizio notifiche DISATTIVATO", Toast.LENGTH_SHORT).show();
       
    }

Vi ringrazio anticipatamente.