Skip to main content

How to easily create background notifications in Sketchware(original)

One of the keys to building a successful app is to find mechanisms that will keep your users engaged. You can do this by using background notifications. This tutorial will show you how to do that in Sketchware. We will cover:

1. How to create notifications in Sketchware

2. How to show these notifications even when the app is closed.

We will start by creating a new project. If you do not know how to create a new project please check out this article here. Once we have created our project, let us create a more block to place our code. Navigate to the events menu and then to the moreblock section as shown in the image above.


Create a moreBlock. I have created a moreblock with the name "BackgroundActivity" with a boolean variable named "run." See the image below for how to add the boolean variable.


Place the following block in the moreBlock



Background activity code:

moveTaskToBack(_run);

That will move our task to the background. 

Please note, that at this point we haven't yet added any background task. We just added the moreblock for it

Next, we want to create a notification. We will start by creating a moreblock. We will add two string variables to our moreblock.


In the notifyUser moreblock add the following blocks.


Add the following blocks in the add source directly blocks:

Block 1:

try {

Block 2:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = "Messages"; String description = "You have new messages"; int importance = NotificationManager.IMPORTANCE_MAX; NotificationChannel channel = new NotificationChannel("id 1", name, importance); channel.setDescription(description); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); }

Block 3

Intent intent = new Intent(MainActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); androidx.core.app.NotificationCompat.Builder builder = new androidx.core.app.NotificationCompat.Builder(MainActivity.this, "id 1") .setSmallIcon(R.drawable.app_icon) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setContentTitle(_title) .setContentText(_description) .setPriority(androidx.core.app.NotificationCompat.PRIORITY_MAX) .setContentIntent(pendingIntent) .setAutoCancel(true); androidx.core.app.NotificationManagerCompat notificationManager = androidx.core.app.NotificationManagerCompat.from(MainActivity.this); notificationManager.notify(1, builder.build());

Block 4

} catch (Exception e) {Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); }

Now that we have our moreBlocks... we will use a timer to run in the background and when the phone time based on our calendar component is equal to our we now need to place our logic onBackpressed or onStop...

We will need to create 

1. A timer component
2. A calendar component

So our logic will look like this


We can now run our app... then when we click the back button our logic will be triggered. Our notification will look like this:



Variations: Sending message notifications if app is closed

If you're creating a chat app, you can play around with this logic to create a notification whenever there is a new message. The key is in adjusting the timer. This determines the frequency after which your app checks for messages. The logic below shows how to check for messages every 2 hours. It's not perfect but I'm sure you understand. So you can adjust this to suit your own system.... maybe add the user's name or picture. 

 


I hope you found this very helpful. I look forward to reading about your awesome apps someday.


Comments

Nice method you've set up here but did you take in to consideration that that service will stop once the activity has been destroyed and using a timer task on main thread will break the app in low end devices like since the timer has an infinite loop it will keep on using the ram and the main thread won't be able to handle this because all the activities of the app are based on the same thread
Hi can you help me with where you got this amazing blogger theme thanks
Likhwa said…
Yeah I noticed that it has some issues and will need to be refined. Do you have any suggestions or a workaround?
Creating a moreblock called anything (i prefer thread runner class) and put this code inside it
Class Code:
}
class ThreadLoader {
private Runnable after;
private android.os.Handler handler = new android.os.Handler() {
@Override
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0x2:
after.run();
}
super.handleMessage(msg);
}
};

public void run(final Runnable runnable, Runnable _after)
{
after = _after;
new Thread(new Runnable() {
@Override
public void run() {
runnable.run();
handler.sendEmptyMessage(0x2);
}
}).start();
}

}

public void nothing (){
//end of class






Now to do whenever you want to do a very long ram consuming process use this code together with the class

Code:

new ThreadLoader().run(new Runnable() {
@Override
public void run() {
//Here we can perform our background activities to prevent the UI from freezing when the service starts

}, new Runnable() {
@Override
public void run() {
//Here we do something to the UI when the background task has been completed in this case we synce the listview
}
});

//That's all
Unknown said…
It is saying androidx cannot be resolved to a type
App Banao.com said…
Sir,
how to integrate payment gateway or UPI payment in app from created by sketchware.
Nice Project.
May you always be happy.

Popular posts from this blog

Hip hop and RnB songs to apologize to your partner

Love is a beautiful thing, but it often goes wrong. This often leads to pain, suffering and sorrow.  Being imperfect beings, hearts tend to get broken all the time regardless how hard we may try to avoid it.  The heartbreak is often inadvertent but at times we find ourselves in the wrong. An oversight, a word unsaid or even a lapse in our judgement can cause our loved ones harm. This doesn't always have to be the end though. Oftentimes, relationships can be mended by simply uttering three simple words: "I AM SORRY". This article is a collection of some of my favourite 'I'm sorry' songs. I hope you'll enjoy these apology songs, but more importantly, I hope you will get a few quotables and some wisdom nuggets from them.  The best apology however, is to change behaviour (got that from a Jay Z interview) so as you apologize, please remember that it was your actions that hurt them. The best apology is one which involves you not repeating those same mistakes aga

Php date: How to get the first and last day of the week

In this tutorial, I'll show you how to get the first and last day of the week in php. By default, in PHP the week runs from Monday to Sunday. However we'll cover two methods to get the first and last day for both those who consider Sunday or Monday as their first day of the week. We will be using 2 functions to achieve this: date() strtotime() We will use a combination of these two functions and store the result in a variable.  How to get the first day of the week If you want to get Sunday, use this method: $firstday = date('l Y-m-d', strtotime("sunday -1 week")); echo $firstday; If you want to get the date for Monday, this current week, use this method: $monday = date('l Y-m-d', strtotime("monday -1 week ")); echo $monday; How to get the last day of the week The following code will give you Saturday as the last day of the current week. $lastday = date('l Y-m-d', strtotime("saturday 0 week")); echo $last