如何在android中显示一段时间后的toast消息?

时间:2013-09-01 15:46:44

标签: android alarmmanager

我从当前时间开始每隔20秒显示一次toast留言,但是如果我去了应用程序则无法正常工作。这是我的代码:

public class Main extends Activity {
    final static private long ONE_SECOND = 1000;
    final static private long TWENTY_SECONDS = ONE_SECOND * 20;

    PendingIntent pi;
    BroadcastReceiver br;
    AlarmManager am;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        br = new BroadcastReceiver() {
            @Override
            public void onReceive(Context c, Intent i) {
                Toast.makeText(c, "Rise and Shine!", Toast.LENGTH_LONG).show();
                Log.i("Receive message in every five seconds", "message");
            }
        };
        registerReceiver(br, new IntentFilter("com.authorwjf.wakeywakey"));
        pi = PendingIntent.getBroadcast(this, 0, new Intent(
                "com.authorwjf.wakeywakey"), 0);
        am = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));

        am.setRepeating(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime(),
                TWENTY_SECONDS, pi);
    }

    @Override
    protected void onDestroy() {
        am.cancel(pi);
        unregisterReceiver(br);
        super.onDestroy();
    }
}

我的问题是,如果应用程序没有运行,但它仍然可以显示吐司消息?怎么可能在android?

3 个答案:

答案 0 :(得分:0)

您必须创建一个包含处理程序的类更新程序

它会定期执行(你可以定义这个periode):

    import android.os.Handler;
    public class Updater {

    private Handler mHandler = new Handler();
    private Runnable mStatusChecker;
    final static private long TWENTY_SECONDS = 20000;
    private int UPDATE_INTERVAL = TWENTY_SECONDS;

    public Updater(final Runnable updater){
        mStatusChecker = new Runnable() {
            @Override
            public void run() {
                updater.run();
                mHandler.postDelayed(this, UPDATE_INTERVAL);
            }
        };
    }

    public Updater(Runnable updater, int interval){
        this(updater);
        UPDATE_INTERVAL = interval;
    }

    public void startUpdates(){
        mStatusChecker.run();
    }

    public void stopUpdates(){
        mHandler.removeCallbacks(mStatusChecker);
    }}

而不是创建服务" ServiceOn" :

    public class ServiceOn extends Service {

Updater updater = new Updater(new Runnable() {

    @Override 
    public void run() {

    // put your code here
    //  toast or what you want
    }});

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

    @Override
    public void onCreate()
    {       
        updater.startUpdates();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy()
    {
        updater.stopUpdates();
        super.onDestroy();
    }}

最后在您的活动中,您可以拨打此服务:

context.startService(new Intent(context, ServiceOn.class));

即使应用程序停止运行,这也会每20秒工作一次

答案 1 :(得分:0)

试试此代码我希望它的工作......

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    final Handler h=new Handler();
    final  Runnable r=new Runnable() {

    public void run() {
       // TODO Auto-generated method stub
        Toast.makeText(getBaseContext(),"Example OF Practicle 8",Toast.LENGTH_SHORT).show();
    }
 };

 Timer t=new Timer();
 t.scheduleAtFixedRate(new TimerTask() {

     @Override
     public void run() {
        // TODO Auto-generated method stub
        h.post(r);
     }
 },2000, 5000);

答案 2 :(得分:0)

您可以使用setTimeout

setTimeout( function(){ 
    toastr.clear(); // User to Clear the Toast Message Popup
}, 1000 ); // We can set our own time interval to disappear the popup

希望它能帮到你