2012-02-01 9 views
6

Estoy usando el complemento StatusBarNotification (Android) para Phonegap para activar una notificación. Ahora quiero hacer esto en un momento específico, y por lo que he leído tengo que usar el AlarmManager de Android. Intenté algunos enfoques, pero no puedo hacer que funcione.AlarmManager con phonegap

¿Alguna sugerencia sobre cómo puedo hacer esto?

EDIT: Puedo obtener la notificación para mostrar si puse el código en onReceive() para showNotification(). El problema parece ser que el receptor no recibe la alarma. Probablemente porque no tengo la acción correcta en IntentFilter.

este es mi código. Tengo construirlo desde el plugin para StatusBarNotification Phonegap, que se encuentra here

public class StatusBarNotification extends Plugin { 
// Action to execute 
public static final String ACTION="notify"; 

private Context context; 
BroadcastReceiver receiver; 

public StatusBarNotification() { 
    this.receiver = null; 
} 

public void setContext(PhonegapActivity ctx) { 
    super.setContext(ctx); 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(); //Dunno what to put here 
    if(receiver == null) { 
     this.receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.d("Notification", "inside onReceive"); 
       /*int icon = R.drawable.notification; 
       long when = System.currentTimeMillis(); 
       NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 

       Intent notificationIntent = new Intent(context, context.getClass()); 
       PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
       Notification noti = new Notification(icon, "NOTIFICATION", when); 
       noti.setLatestEventInfo(context, "TITLE", "TEXT", contentIntent); 
       manager.notify(1, noti); 
       */ 
      } 
     }; 
     ctx.registerReceiver(this.receiver, intentFilter); 
    } 
} 

/** 
* Executes the request and returns PluginResult 
* 
* @param action  Action to execute 
* @param data   JSONArray of arguments to the plugin 
* @param callbackId The callback id used when calling back into JavaScript 
* 
* @return    A PluginRequest object with a status 
* */ 
@Override 
public PluginResult execute(String action, JSONArray data, String callbackId) { 
    String ns = Context.NOTIFICATION_SERVICE; 

    context = this.ctx.getApplicationContext(); 

    PluginResult result = null; 
    if (ACTION.equals(action)) { 
     try { 

      String title = data.getString(0); 
      String body = data.getString(1); 
      Log.d("NotificationPlugin", "Notification: " + title + ", " + body); 

      showNotification(title, body); 
      result = new PluginResult(Status.OK); 
     } catch (JSONException jsonEx) { 
      Log.d("NotificationPlugin", "Got JSON Exception " 
        + jsonEx.getMessage()); 
      result = new PluginResult(Status.JSON_EXCEPTION); 
     } 
    } else { 
     result = new PluginResult(Status.INVALID_ACTION); 
     Log.d("NotificationPlugin", "Invalid action : "+action+" passed"); 
    } 
    return result; 
} 

/** 
* Displays status bar notification 
* 
* @param contentTitle Notification title 
* @param contentText Notification text 
* */ 
public void showNotification(CharSequence contentTitle, CharSequence contentText) { 
    Intent intent = new Intent(ctx, ctx.getClass()); 
    PendingIntent pi = PendingIntent.getBroadcast(ctx, 1234, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    Calendar cal = Calendar.getInstance(); 
    AlarmManager am = (AlarmManager) ctx.getSystemService(ctx.ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi); 

} 

public void onDestroy() { 
    if (this.receiver != null) { 
     try { 
      this.ctx.unregisterReceiver(this.receiver); 
     } catch (Exception e) { 
      Log.e("LOG TAG", "Error unregistering network receiver: " + e.getMessage(), e); 
     } 
    } 
} 

}

Respuesta

0

Usted probablemente tendrá que escribir un plugin PhoneGap que puede hacer las cosas AlarmManager.

Éstos son algunos ejemplos de BroadcastReceivers en plugins:

https://github.com/callback/callback-android/blob/master/framework/src/com/phonegap/NetworkManager.java

https://github.com/phonegap/phonegap-plugins/blob/master/Android/PhoneListener/PhoneListener.java

+0

Esa es una de las cosas que he intentado. Probablemente no lo hizo bien aunque. La única cosa con la que tengo un "problema" ahora es qué tipo de acción debo agregar a mi IntentFilter. Esto es cuando estoy viendo los ejemplos de BroadcastReceiver. – user713821

+0

De hecho, estoy a punto de abordar esto para una aplicación. Me mantendré atento a esta pregunta y actualizaré si encuentro una solución ... – Devgeeks

+0

Los enlaces no funcionan 404 Errores. –

1

que puedes usar para establecer LocalNotification.js alerta para fecha y hora específicas. Porque lo había usado y funciona bien.

+0

¿Puedes agregar un código de muestra por favor? –

+0

Aquí hay un poco de documentación y un ejemplo de su página de proyecto github: https://github.com/phonegap/phonegap-plugins/tree/master/Android/LocalNotification –

Cuestiones relacionadas