0

アクティビティを開始するはずの Broadcast レシーバーに CountDownTimer があります。

しかし、何度か試みた後、アクティビティを開始できません...

これは、いくつか読んだ後の最後の試行のコードスニペットですが、 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 を使用しないでください。

レシーバーのライフサイクルに関するドキュメントを確認してください。非同期操作は、broadcastReciever では実行できません。コードが 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 に答える