简体   繁体   中英

Background service to display toast every 2 min in android

I am writing a small android app that does something in the background(ie service) and I want it to display a toast message after an interval of every 'x' minutes. How do I go about doing it with a broadcast listener and alarmmanager. Could somebody please write a sample code to demonstrate it.

You can easily do this by using Timer and TimerTask in your Service class.

1. In your Service class, first create an inner class DisplayToastTimerTask extending from TimerTask to display the Toast message. You have to use Handler with Runnable to show Toast from TimerTask :

private class DisplayToastTimerTask extends TimerTask {

    Handler mHandler = new Handler();

    @Override
    public void run() {

        // Do something....

        mHandler.post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), 
                               "Hello world", Toast.LENGTH_SHORT).show();
            }
        });

    }
}

2. Use Timer to schedule DisplayToastTimerTask for repeated execution with an interval of 2 min

private static final int TIMER_INTERVAL = 120000; // 2 Minute
private static final int TIMER_DELAY = 0;

// Create new Timer
Timer mTimer = new Timer();
mTimer.scheduleAtFixedRate(new DisplayToastTimerTask(), TIMER_DELAY, TIMER_INTERVAL);

EXAMPLE:

#. Here is the fully working Service class:**

//MyService.java

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;

public class MyService extends Service {

    private Timer mTimer;
    private Handler mHandler = new Handler();

    private static final int TIMER_INTERVAL = 120000; // 2 Minute
    private static final int TIMER_DELAY = 0;

    @Override
    public void onCreate() {
        super.onCreate();

        if (mTimer != null)
            mTimer = null;

        // Create new Timer
        mTimer = new Timer();

        // Required to Schedule DisplayToastTimerTask for repeated execution with an interval of `2 min`
        mTimer.scheduleAtFixedRate(new DisplayToastTimerTask(), TIMER_DELAY, TIMER_INTERVAL);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        return Service.START_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        // Cancel timer
        mTimer.cancel();
    }

    // Required to do some task
    // Here I just display a toast message "Hello world"
    private class DisplayToastTimerTask extends TimerTask {

        @Override
        public void run() {

            // Do something....

            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(), "Hello world", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
}

#. You can start your service like below:

Intent intentMyService = new Intent(context, MyService.class);
mContext.startService(intentMyService);

#. Don't forget to declare MyService class into AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application>

        <service android:name=".MyService" />

    </application>
</manifest>

Hope this will help~

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM