2010-12-11 21 views
11

私のアプリケーションは、アラームタイプのアプリを備えたタイマーです。 タイマーが終了すると、ユーザーがナビゲートしてもアプリの主なアクティビティが表示されますが、アプリはまだ実行されています。アプリケーションを前面に戻す

私は必要なコードを配置したい場所を私は示しています

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

     public void onFinish() { 

     /** code here to bring the app back to the front/top of stack, in its current state */ 


     timeDisplay.setText("Expired.!"); 
     ReminderFlashingScreen.setVisibility(View.GONE); 
     statustab.setBackgroundResource(R.drawable.redtab); 
     seeker.setProgress(0); 
     reset.setBackgroundResource(R.drawable.resetbtnoff); 
     playExpiredAlarm(); 
     alarmAnimation.start(); 
     flasher.setVisibility(View.VISIBLE); 
     StopAlarmButtonAnimation.start(); 
     StopAlarmButton.setVisibility(View.VISIBLE); 
     expired = true; 
     } 

     public void onTick(long millisUntilFinished) { 
      remindertimepref = prefs.getString("reminderTime", "<unset>"); 
      remindtime = Integer.parseInt(remindertimepref.trim()); 
      timeDisplay.setText(formatTime(millisUntilFinished)); 
      seeker.setProgress((int) (millisUntilFinished/1000/60) + 1); 
      if (used == true){ 
       reminder_time = ((int) (millisUntilFinished/1000)); 
       if (reminder_time == remindtime){ 
        reminderalarm(); 
        used = false; 
        } 
       } 

      } 
    } 
+1

何場合は、ユーザーがより多くの何かのメモリ集中的に離れてナビゲートし、システムアプリを殺すことにしましたか?私の主張は、タイマーをサービスに入れたいと思うことです。タイマーが完了したら、あなたのアプリが聴いている放送を送ることができます。よりシンプルでクリーナー! – codinguser

+1

何か私は上に読み込む必要があります..アンドロイドに新しい、と私の最初の考えている:アプリが殺された場合、何をカウントを保持する..?私は現在の状態を保存する方法を知っていますが、タイマーが一時停止されるので目的はありません。あなたのソリューションは、私が探索しなければならない/探しているべきもので、何かの点を探っていなければならないルートのように聞こえる。 – 11Monkeys

+1

onroid AlarmManagerの使用について考えてみましょうhttp://developer.android.com/intl/de/reference/android/app/AlarmManager.htmlあなたがonPause呼び出しを受け取った後に少なくともそれを使用する時間を記録するのではなく、これにより、バッテリとCPUの使用量が大幅に削減されます。 – Janusz

答えて

0

http://developer.android.com/guide/appendix/faq/framework.html#4を参照してください:

活動はすでにそれを開始する前に実行している場合、どのように確認できますか?

新しいアクティビティを実行していない場合、またはアクティビティスタックをバックグラウンドですでに実行している場合は、startActivity()コールでNEW_TASK_LAUNCHフラグを使用するのが一般的な仕組みです。私にとって

+0

これは前述のように起こるはずですが、まだ動作していない状態です。アプリケーションを起動してからホームボタンをタップすると、アプリはバックグラウンドに移行しますが、まだ実行中ですが、2-3分後にNEW_TASK_LAUNCHフラグでインテントが実行されますが、残っている場所からではなく、 – Zoombie

3

それは、このでした:あなたは、Serviceであなたは、それがバックグラウンドでいながら、Androidのアプリケーションを殺さないと確信している、そのように、あなたのタイマーを置くべき

Intent intent = new Intent(Application.getContext(), AbstractFragmentActivity.instance.getClass()); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Application.getContext().startActivity(intent); 
0

。 (MyCountクラス全体をサービスに入れることができます)。あなたが常に最前面にアプリケーション(活動を)持って来ることができるサービスから

Intent intent = new Intent(getBaseContext(), TimerActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
startActivity(intent); 
関連する問題