0

我在广播接收器中有一个 CountDownTimer 应该启动一个活动。

但是经过几次尝试后,我无法启动 Activity...

这是我在阅读后最后一次尝试的代码片段,但 startActivityForResult 未被识别...

public class GSMCountDownTimer extends CountDownTimer  {  
        public GSMCountDownTimer(long millisInFuture, long countDownInterval)
        {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onFinish(){        
           if (reseau   ==  false){
              Intent fIntent = new Intent();
              fIntent.setClassName("com.atelio.smart", "com.atelio.smart.AlerteGsm");
              startActivityForResult(fIntent,0);

           }
        }
        @Override
        public void onTick(long millis){     

        }                     
    } 

我需要主类成为广播接收器来收听电话状态......

4

1 回答 1

2

您不应在 broadCastReciever 中使用 CountDownTimer。

检查接收器生命周期文档。任何异步操作都不能在广播接收器中完成。一旦代码从 onRecieve 返回,Reciever 对象就不再处于活动状态。

因此,请改用 AlarmManager。

AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

Intent fIntent = new Intent();
fIntent.setClassName("com.atelio.smart", "com.atelio.smart.AlerteGsm");

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, fIntent, 0);

Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, millisInFuture);

alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
于 2012-12-05T16:55:14.010 回答