-
-
Save BrandonSmith/6679223 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="utf-8"?> | |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
package="com.cards.notification"> | |
<uses-sdk | |
android:minSdkVersion="17" | |
android:targetSdkVersion="17" /> | |
<application | |
android:allowBackup="true" | |
android:icon="@drawable/ic_launcher" | |
android:label="@string/app_name" | |
android:theme="@style/AppTheme" > | |
<activity | |
android:name="com.cards.notification.MainActivity" | |
android:label="@string/app_name" > | |
<intent-filter> | |
<action android:name="android.intent.action.MAIN" /> | |
<category android:name="android.intent.category.LAUNCHER" /> | |
</intent-filter> | |
</activity> | |
<receiver android:name=".NotificationPublisher" /> | |
</application> | |
</manifest> |
<menu xmlns:android="http://schemas.android.com/apk/res/android"> | |
<item android:id="@+id/action_5" | |
android:title="5 seconds" | |
android:showAsAction="never" /> | |
<item android:id="@+id/action_10" | |
android:title="10 seconds" | |
android:showAsAction="never" /> | |
<item android:id="@+id/action_30" | |
android:title="30 seconds" | |
android:showAsAction="never" /> | |
</menu> |
package com.cards.notification; | |
import android.app.AlarmManager; | |
import android.app.Notification; | |
import android.app.PendingIntent; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.os.Bundle; | |
import android.app.Activity; | |
import android.os.SystemClock; | |
import android.view.Menu; | |
import android.view.MenuItem; | |
public class MainActivity extends Activity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
} | |
@Override | |
public boolean onCreateOptionsMenu(Menu menu) { | |
// Inflate the menu; this adds items to the action bar if it is present. | |
getMenuInflater().inflate(R.menu.main, menu); | |
return true; | |
} | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
switch (item.getItemId()) { | |
case R.id.action_5: | |
scheduleNotification(getNotification("5 second delay"), 5000); | |
return true; | |
case R.id.action_10: | |
scheduleNotification(getNotification("10 second delay"), 10000); | |
return true; | |
case R.id.action_30: | |
scheduleNotification(getNotification("30 second delay"), 30000); | |
return true; | |
default: | |
return super.onOptionsItemSelected(item); | |
} | |
} | |
private void scheduleNotification(Notification notification, int delay) { | |
Intent notificationIntent = new Intent(this, NotificationPublisher.class); | |
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, 1); | |
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification); | |
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); | |
long futureInMillis = SystemClock.elapsedRealtime() + delay; | |
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); | |
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent); | |
} | |
private Notification getNotification(String content) { | |
Notification.Builder builder = new Notification.Builder(this); | |
builder.setContentTitle("Scheduled Notification"); | |
builder.setContentText(content); | |
builder.setSmallIcon(R.drawable.ic_launcher); | |
return builder.build(); | |
} | |
} |
package com.cards.notification; | |
import android.app.Notification; | |
import android.app.NotificationManager; | |
import android.content.BroadcastReceiver; | |
import android.content.Context; | |
import android.content.Intent; | |
public class NotificationPublisher extends BroadcastReceiver { | |
public static String NOTIFICATION_ID = "notification-id"; | |
public static String NOTIFICATION = "notification"; | |
public void onReceive(Context context, Intent intent) { | |
NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); | |
Notification notification = intent.getParcelableExtra(NOTIFICATION); | |
int id = intent.getIntExtra(NOTIFICATION_ID, 0); | |
notificationManager.notify(id, notification); | |
} | |
} |
Wonderful job! Worked perfectly!
Thank you! very helpful.
For higher APIs you have to create a NotificationChannel first. Otherwise no notification will be viewed.
Clean af. Cheers
Very Helpful! I have been looking for this for so long.
In fact, not worked for me for a device whose API level is 27 (Oreo - 8.1). Just could not see anything.
@talhakabakus did u manage to get it working?
Thank you :) I want to ask how can I set multiple alarm, can you share your experience to us?
It was the only notification scheduler that worked for me so far. Thank you very much!
At last it worked for me also Thanks buddy
Thanks this is great!!!
Cannot resolve the symbol "menu" - doesnt work it
Thank You! Helped me a lot XD
Not working on After android 10 update.
Even though I had to do a few changes related to notification channel. This was extremely helpful! Thanks a lot 👍 🥇
Why does it look very similar to this tutorial posted on May 16, 2019. If this is your original code, you should tell the publisher as I see your's is from much older time
After killing application. Notifications not triggering.
Not working on After android 10 update.
Did you find any solution
After killing application. Notifications not triggering.
Did u find any solution
Not working on After android 10 update.
make sure to add notification channel for api level greater than Android 7
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String channelName = "My Background Service";
NotificationChannel chan = new NotificationChannel("com.offline.english.dictionary.speech.translator",
channelName, NotificationManager.IMPORTANCE_LOW);
chan.setLightColor(Color.BLUE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
notificationManager.createNotificationChannel(chan);
}
notificationManager.notify(2, notification);
also add this to get notification funtion
Notification.Builder builder = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
builder = new Notification.Builder(this,
"com.offline.english.dictionary.speech.translator");
}
else {
builder = new Notification.Builder(this);
}
Thanks !
notification not received after kill application Android 10 any one help..?
@BilalZurmati - thank you! This was a big help.
Thankyou for your shareing
In fact, not worked for me for a device whose API level is 27 (Oreo - 8.1). Just could not see anything.