+1 voto
Hola y buen dia :D ,

les escribo nuevamente  ya que me estanque de nuevo xD , lo que pasa es que quiero hacer que una aplicacion envie una notificacion cada cierto  tiempo al usuario, algo asi como  , que le recuerde al usuario algun evento cada 20 dias por poner un ejemplo y que se envie la notificacion con la cual al dar clic abra la app en cuestion.

desde ya muchas gracias por su tiempo y ayuda .
preguntado por Elkin Jose Sepulveda Dic 6, 2015 en Android
editado por Elkin Jose Sepulveda Dic 6, 2015

1 Respuesta

+1 voto
Muy buenas de nuevo :)

Lo que necesitas es un poco complejo, pero vamos a delante. Lo primero que tienes que hacer es crear un Service para que se inicie con el móvil y que cada cierto tiempo salte (tienes ejemplos en http://developer.android.com/intl/es/guide/components/services.html).

Luego diseñar la notificación que necesites (ejemplo en http://developer.android.com/intl/es/guide/topics/ui/notifiers/notifications.html).

También podría interesarte el AlarmManager para que mande un Intent cada cierto tiempo http://developer.android.com/intl/es/reference/android/app/AlarmManager.html
respondido por Ramon [Admin] Dic 8, 2015

Hola muchas gracias por responder y tus consejos , he logrado hacer que la aplicacion me envie notificaciones cada 15 minutos   y deberia ya poder enviarlas cada x dias que quiera ,me ha quedado asi .

Intent i = new Intent(Rapid_Page5Activity.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Rapid_Page5Activity.this, 0, i, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
long updateInterval = AlarmManager.INTERVAL_FIFTEEN_MINUTES;
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + updateInterval, updateInterval, pendingIntent);

 

y tambien 

 

ic class AlarmReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            showNotification(context);
        }

        public void showNotification(Context context) {
            Intent i = new Intent(context,MainActivity.class);
            PendingIntent pi = PendingIntent.getActivity(context, 0, i, 0);
            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("vida y salud")
                    .setContentText("No olvides hacer tu examen mensual");
            mBuilder.setContentIntent(pi);
            mBuilder.setDefaults(Notification.DEFAULT_SOUND);
            mBuilder.setAutoCancel(true);
            NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            mNotificationManager.notify(0, mBuilder.build());
        }}

 

gracias por tu guia ramon lo pude hacer mucho mas rapido.

Ahora disculpa una ultima pregunta. he notado que cuando apago el dispositivo , este pierde la sincronizacion .

Por ejemplo si pongo que envie una notificacion cada hora , y apago el dispositivo faltando media hora ylo enciendo de nuevo , reinicia la cuenta de 1 hora nuevamente , en vez de enviar la notificacion en la media hora restante.

Si puedes darme algun consejo , muchas gracias de antemano  :D

De nada Elkin, me alegro que ya lo tengas :)

Para continuar con la cuenta atrás tienes que memorizar el tiempo que falte cuando se apague el dispositivo, para volver a continuarlo cuando se encienda el dispositivo.

Para detectar cuando el dispositivo se enciende lo puedes hacer con un BroadcastReceiver suscrito al intent ACTION_BOOT_COMPLETED  (http://developer.android.com/intl/es/reference/android/content/Intent.html#ACTION_BOOT_COMPLETED) y para detectar el apagado con ACTION_SHUTDOWN (http://developer.android.com/intl/es/reference/android/content/Intent.html#ACTION_SHUTDOWN)

<!-- Para detectar cuando el dispositivo se enciende-->
<receiver
        android:name="com.jarroba.BootReceiverOn"
        android:enabled="true" 
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
        <intent-filter>
            <action android:name="android.intent.action.SCREEN_ON" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
</receiver>


<!-- Para detectar cuando el dispositivo se apaga-->
<receiver android:name="com.jarroba.BootReceiverOff">
    <intent-filter>
        <action android:name="android.intent.action.ACTION_SHUTDOWN" />
        <action android:name="android.intent.action.QUICKBOOT_POWEROFF" />
    </intent-filter>
</receiver>

Y en Java (es seudocódigo):

public class BootReceiverOn extends BroadcastReceiver { 

    @Override
    public void onReceive(Context aContext, Intent aIntent) { 
      //  Cuando el dispositivo se enciende
    }
    
}

public class BootReceiverOff extends BroadcastReceiver { 

    @Override
    public void onReceive(Context aContext, Intent aIntent) { 
      //  Cuando el dispositivo se apaga
    }
    
}

También puede que necesites Calendar para obtener la hora actual y realizar los cálculos: http://developer.android.com/intl/es/reference/java/util/Calendar.html

Hola!!

Tengo el mismo problema que tú para una app que estoy desarrollando. ¿Podrías, por favor, compartir el código que has usado para las notificaciones ?

(Es para una buena causa: una app de codigo abierto para autistas ;) )

Gracias de antemano! Un saludo!
Un gusto saludarte!

Quiero realizar la misma app, para que envie notificaciones cada cierto tiempo, realicé el codigo y me guié con lo que hicieron en los posts anteriores, pero no me funciona, podrias compartirme el codigo por favor??

Saludos