2012-06-16 2 views
1

Я пишу небольшое приложение для Android, которое делает что-то в фоновом режиме (например, сервис), и я хочу, чтобы он отображал тосты после интервала каждые минуты. Как мне это сделать с помощью широковещательного прослушивателя и будильника. Может кто-нибудь, пожалуйста, напишите пример кода, чтобы продемонстрировать его.Фоновая служба для отображения тостов каждые 2 минуты в android

+0

Вы должны рассмотреть отображение Notification вместо тоста. –

+0

Я могу показать, как вы можете это сделать. сначала на прослушивателе загрузки запустите выполнение своего фона и установите будильник через 10 минут. реализовать прослушиватель сигналов тревоги, в котором введена логика уведомления и в конце класса снова установлен будильник. thats it – rajpara

+0

у вас есть образец кода для этой причины. Я пытаюсь сделать что-то подобное. благодаря! – ghostrider

ответ

0

Вы можете легко сделать это, используя Timer и TimerTask в вашем классе Service.

1. В вашем Service классе, сначала создать внутренний класс DisplayToastTimerTask, простирающийся от TimerTask для отображения Toast сообщения. Вы должны использовать Handler с Runnable, чтобы показать Toast от 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. Используйте Timer планировать DisplayToastTimerTask для повторного выполнения с интервалом 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); 

ПРИМЕР:

#. Вот полностью рабочий Service класс: **

//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(); 
       } 
      }); 
     } 
    } 
} 

#. Вы можете начать свой service, как показано ниже:

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

#. Не забудьте объявить MyService класс в AndroidManifest.xml:

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

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

    </application> 
</manifest> 

Надеется, что это поможет ~

Смежные вопросы