Autore Topic: Dove richiamo la notifica??  (Letto 756 volte)

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Dove richiamo la notifica??
« il: 31 Luglio 2013, 17:45:35 CEST »
0
Hola gente..sto cercando di creare una notifica attivabile o meno attraverso una preferences screen. Quindi, se clicco nel checkboxpreferences la notifica partirà, contrario se tolgo il check sparirà. Il codice finora creato è questo:
Codice (Java): [Seleziona]
private void sendSimpleNotification(){

    boolean permanent = PreferenceManager.getDefaultSharedPreferences(context).getBoolean("permanent", false);

    if(permanent) {
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(service.this);
        notificationBuilder.setContentTitle("Title");
        notificationBuilder.setContentText("Context");
        notificationBuilder.setTicker("TickerText");
        notificationBuilder.setWhen(System.currentTimeMillis());
        notificationBuilder.setSmallIcon(R.drawable.ic_stat_icon);

        Intent notificationIntent = new Intent(this, service.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

        notificationBuilder.setContentIntent(contentIntent);
        notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
        mNotificationManager.notify(1, notificationBuilder.build());
    }
    else{
        mNotificationManager.cancel(SIMPLE_NOTIFICATION_ID);      
    }

}
Se questo codice lo lascio così com'è non succede nulla..posso cliccare nel checkboxpreferences mille volte ma non succede nulla. Se per esempio invece richiamo sendSimpleNotification(); nell'onResume, succede che nel momento in cui esco dal menù delle impostazioni la notifica parte e uguale se la voglio togliere. Detto questo so che il codice funziona..ora, quello che però voglio io è che la notifica parta subito nel momento in cui faccio il check nel checkbox. Non devo uscire dalle preferences perchè parta o sparisca..capito?Devo richiamare sendSimpleNotification(); in qualche altro punto?

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Dove richiamo la notifica??
« Risposta #1 il: 01 Agosto 2013, 19:19:23 CEST »
0
Ciao punticci,
Devi impostare un Listener per il tuo CheckBoxPreference e richiamare il sendSimpleNotification() in onPreferenceChange del Listener.
Ecco un esempio:
Codice (Java): [Seleziona]
CheckBoxPreference checkBoxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkBoxPref");
checkBoxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
      public boolean onPreferenceChange(Preference preference, Object newValue) {
          if (newValue.toString().equals("true")) {
              sendSimpleNotification();
          }
          else if (newValue.toString().equals("false")){
              mNotificationManager.cancel(SIMPLE_NOTIFICATION_ID);    
          }
          return true;
      }
});

E modifichi il metodo sendSimpleNotification() come segue
Codice (Java): [Seleziona]
private void sendSimpleNotification(){
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(service.this);
        notificationBuilder.setContentTitle("Title");
        notificationBuilder.setContentText("Context");
        notificationBuilder.setTicker("TickerText");
        notificationBuilder.setWhen(System.currentTimeMillis());
        notificationBuilder.setSmallIcon(R.drawable.ic_stat_icon);

        Intent notificationIntent = new Intent(this, service.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

        notificationBuilder.setContentIntent(contentIntent);
        notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
        mNotificationManager.notify(1, notificationBuilder.build());
}


Oppure puoi lasciare invariato il metodo sendSimpleNotification() ed implementare il Listener così
Codice (Java): [Seleziona]
CheckBoxPreference checkBoxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkBoxPref");
checkBoxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
      public boolean onPreferenceChange(Preference preference, Object newValue) {
              sendSimpleNotification();
      }
});
« Ultima modifica: 01 Agosto 2013, 19:25:31 CEST da vincenzoc »
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Re:Dove richiamo la notifica??
« Risposta #2 il: 01 Agosto 2013, 20:29:52 CEST »
0
Ciao punticci,
Devi impostare un Listener per il tuo CheckBoxPreference e richiamare il sendSimpleNotification() in onPreferenceChange del Listener.
Ecco un esempio:
Codice (Java): [Seleziona]
CheckBoxPreference checkBoxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkBoxPref");
checkBoxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
      public boolean onPreferenceChange(Preference preference, Object newValue) {
          if (newValue.toString().equals("true")) {
              sendSimpleNotification();
          }
          else if (newValue.toString().equals("false")){
              mNotificationManager.cancel(SIMPLE_NOTIFICATION_ID);    
          }
          return true;
      }
});

E modifichi il metodo sendSimpleNotification() come segue
Codice (Java): [Seleziona]
private void sendSimpleNotification(){
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(service.this);
        notificationBuilder.setContentTitle("Title");
        notificationBuilder.setContentText("Context");
        notificationBuilder.setTicker("TickerText");
        notificationBuilder.setWhen(System.currentTimeMillis());
        notificationBuilder.setSmallIcon(R.drawable.ic_stat_icon);

        Intent notificationIntent = new Intent(this, service.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

        notificationBuilder.setContentIntent(contentIntent);
        notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
        mNotificationManager.notify(1, notificationBuilder.build());
}


Oppure puoi lasciare invariato il metodo sendSimpleNotification() ed implementare il Listener così
Codice (Java): [Seleziona]
CheckBoxPreference checkBoxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkBoxPref");
checkBoxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
      public boolean onPreferenceChange(Preference preference, Object newValue) {
              sendSimpleNotification();
      }
});
Intanto grazie della risposta, volevo chiederti, sia il metodo della notifica che l'ultima opzione che proponi devono essere nel preferences screen? No nella MainActivity vero?

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Dove richiamo la notifica??
« Risposta #3 il: 01 Agosto 2013, 20:36:25 CEST »
0
Intanto grazie della risposta, volevo chiederti, sia il metodo della notifica che l'ultima opzione che proponi devono essere nel preferences screen? No nella MainActivity vero?

Esatto  :-)
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Re:Dove richiamo la notifica??
« Risposta #4 il: 01 Agosto 2013, 20:58:18 CEST »
0
Mi crasha :-( e mi da di problemi con parentesi ecc ecc..tutto nell'onCreate comunque vero?

Cerco aiuto/beta tester per la mia prima app http://www.androidiani.com/forum/showthread.php?t=315987


Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Dove richiamo la notifica??
« Risposta #5 il: 01 Agosto 2013, 21:16:38 CEST »
0
Riporta il tuo codice ed il Logcat con gli errori altrimenti è impossibile aiutarti :)
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Re:Dove richiamo la notifica??
« Risposta #6 il: 01 Agosto 2013, 21:33:33 CEST »
0
Riporta il tuo codice ed il Logcat con gli errori altrimenti è impossibile aiutarti :)
Ti lascio il codice del settings.Java (le preferences screen)
Codice (Java): [Seleziona]
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.text.Html;
import android.widget.CheckBox;
import android.widget.Toast;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.support.v4.app.*;
import android.preference.*;
import android.content.*;
import android.provider.*;
 
public class settings extends PreferenceActivity {
        String ListPreference;
        boolean CheckboxPreference;
        CheckBoxPreference checkBoxPref;
        private static final int SIMPLE_NOTIFICATION_ID = 1;

    NotificationManager mNotificationManager;
    ///////////////////
        SharedPreferences mprefs;
    @SuppressLint("WorldReadableFiles")
        @SuppressWarnings("deprecation")
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
               
        addPreferencesFromResource(R.xml.settings);
        final ActionBar bar = getActionBar();
                bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FB8A34")));
                bar.setTitle(Html.fromHtml("<font color='#ffffff'>Battery Stats</font>"));
                //bar.setDisplayHomeAsUpEnabled(true);
                //bar.setHomeButtonEnabled(true);
               
        /*      final CheckBoxPreference firstDependent = (CheckBoxPreference) getPreferenceManager().findPreference("firstDependent");
                firstDependent.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener(){          
                                public boolean onPreferenceChange(Preference preference, Object newValue){

                                    sendSimpleNotification();
                                        return true;
                                }
                                           

                        });*/

                       
                CheckBoxPreference checkBoxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkBoxPref");
                checkBoxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
                                public boolean onPreferenceChange(Preference preference, Object newValue) {
                                        sendSimpleNotification();
                               
                                        return false;
                                }
                        });
                       

    }
       
        private void sendSimpleNotification() {

                boolean firstDependent = PreferenceManager.getDefaultSharedPreferences(settings.this).getBoolean("firstDependent", false);
                if (firstDependent){   

                        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
                                this);notificationBuilder.setOngoing(true);
                        notificationBuilder.setContentTitle("Battery Stats");
                        notificationBuilder.setContentText("Batteria quasi scarica,si consiglia di ricaricare.");
                        notificationBuilder.setTicker("Batteria quasi scarica");
                        notificationBuilder.setWhen(System.currentTimeMillis());
                        notificationBuilder.setSmallIcon(R.drawable.icon_small_not);

                        Intent notificationIntent = new Intent(this, MainActivity.class);


                        PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                                                                                                                                        notificationIntent, 0);
                        notificationBuilder.setContentIntent(contentIntent);

                        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

                        notificationBuilder.setDefaults(Notification.DEFAULT_SOUND
                                                                                        | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);

                        mNotificationManager.notify(1,
                                                                                notificationBuilder.build());
                } else {
                        mNotificationManager.cancel(1);
                }

        }
   
}
Quando clicco per entrare nei settings crasha.e il mio log cat non funziona -.-

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Dove richiamo la notifica??
« Risposta #7 il: 01 Agosto 2013, 21:44:40 CEST »
0
Ti lascio il codice del settings.Java (le preferences screen)

Quando clicco per entrare nei settings crasha.e il mio log cat non funziona -.-

Il log cat è fondamentale, sempre! Trova il modo di farlo funzionare e saprai subito dove sta il problema. Comunque ho notato che nel codice non hai sostituito "checkBoxPref" con il tuo CheckBoxPreference (in findPreference("checkBoxPref")).

Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline punticci

  • Utente junior
  • **
  • Post: 78
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
Re:Dove richiamo la notifica??
« Risposta #8 il: 01 Agosto 2013, 21:55:34 CEST »
0
Il log cat è fondamentale, sempre! Trova il modo di farlo funzionare e saprai subito dove sta il problema. Comunque ho notato che nel codice non hai sostituito "checkBoxPref" con il tuo CheckBoxPreference (in findPreference("checkBoxPref")).
Non capisco..ora comunque almeno entro nelle impostazioni cambiando appunto il nome.però clicco il checkbox e crasha.ma cavolo non parte il log cat!! Ma se tipo ti do il mio indirizzo e-mail riesci ad aiutarmi? Sono mesi che ci provo con sta cosa :-(