Telephone Alarm AlarmManager

I use the StatusBarNotification (Android) plugin for Phonegap to trigger a notification. Now I want this at a specific time, and from what I read, I have to use the Android AlarmManager. I tried some approaches, but can't make it work.

Any suggestions on how I can do this?

EDIT: I can get a notification to show if the code has put in onReceive () for showNotification (). The problem is that the receiver is not receiving an alarm. Perhaps because I do not have the right action in IntentFilter.

this is my code. I built it from the StatusBarNotification plugin for Phonegap, found it 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); } } } 

}

+6
source share
2 answers

You must use LocalNotification.js to set an alert for a specific date and time. Because I used it and it works great.

+1
source
0
source

Source: https://habr.com/ru/post/907439/


All Articles