2012-03-23 28 views
0

私は以下のコードを持っており、5秒ごとにこれをループしたいと思います。私はbroadcastreceiverとalarm managerを使用しようとしましたが、成功しませんでした。私は私のサービスが5回ループするようにしてから、それが永久に止まるようにしたい。これが私が投稿する2番目の質問です。誰かがコードを修正するために私を助けてください、私は2日間私のMacに積み重ねられています。どんな助けもありがとう。ループへAndroidループサービスを5秒ごとに起動し、起動時に起動します

コード5秒ごとに

File key = new File(Environment.getExternalStorageDirectory(),"newfile"+Math.random()+".txt"); 
try { 
    key.createNewFile(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

InfoReceiver.classサービス

public class InfoReceiver extends Service { 

    @Override 
    public void onCreate() 
    { 
     AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, MyBroadcastReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
     Calendar time = Calendar.getInstance(); 
     time.setTimeInMillis(System.currentTimeMillis()); 
     time.add(Calendar.SECOND, 5); 
     alarmMgr.set(AlarmManager.RTC_WAKEUP, 5000, pendingIntent); 
    } 
} 

InfoManager.classサービス

public class InfoManager extends Service { 
    @Override 
    public void onCreate() { 
     File key = new File(Environment.getExternalStorageDirectory(),"newfile"+Math.random()+".txt"); 
     try { 
      key.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

MyBroadcastreceiver.class

public class MyBroadcastReceiver extends BroadcastReceiver { 
    private Context mContext; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent startServiceIntent = new Intent(context, InfoManager.class); 
     context.startService(startServiceIntent); 
    } 
} 

マニフェストコード

<service 
    android:name=".InfoReceiver" 
    android:enabled="true" > 
</service> 
<service 
    android:name=".InfoManager" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name=".InfoManager" /> 
    </intent-filter> 
</service> 
<receiver 
    android:name=".MyBroadcastReceiver" 
    android:process=":remote" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
+0

実際に何をしたいですか?5秒後にサービスを実行しますか? –

+0

電話機の起動時から5秒ごとに、ユーザの外部ストレージにランダムな名前のファイルを作成します。なぜあなたはこれをやるのを手助けすべきですか? – CaseyB

+0

私はそれを確認するためにファイルを作成するように変更しました....実際には、私は(ファイルを作成したい仕事ではありません)。しかし、このコードで私は5秒ごとに5ループの後にファイルを作成したいサービスを永久に破壊する – rami78

答えて

2

使用Handler.postDelayed(RunnableをR、長いdelayMillis)。タイマーやアラームマネージャーが必要なことをする必要はありません。シンプルなまま。

+0

前の質問私は良い評判私はハンドラを処理しないでください。しかし、ありがとうございました....このメソッドは、私はそれが動作することを知っているが、それは私に合っていません..とにかくありがとう – rami78

+0

私は最終的にハンドラでそれをしました。ありがとうございます – rami78

+0

私の答えを投票できますか? :) – drasticp

0

timer代わりのカレンダーを使用してみてください、それはあなたのために働くかどうかを確認します。

0

はこのようにしてみてください。..

counter= new MyCount(5000,1000); 
counter.start(); 

MyCountクラス...

static int n=0; 
public class MyCount extends CountDownTimer{ 
public MyCount(long millisInFuture, long countDownInterval) { 
super(millisInFuture, countDownInterval); 
} 
@Override 
public void onFinish() { 

if(n<5) 
    { 
    counter= new MyCount(5000,1000); 
    counter.start(); 


    File key = new File(Environment.getExternalStorageDirectory(),"newfile"+Math.random()+".txt"); 
     try { 
      key.createNewFile(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    n++; 
    } 

} 
@Override 
public void onTick(long millisUntilFinished) { 
    s1=millisUntilFinished; 

} 
} 
+0

どこにこの情報を追加する必要がありますか?どのクラスに? – rami78

+0

これをあなたの主な活動.. – 5hssba

+0

に入れてください。しかし、これはリブート後もまだ動作しますか?そしてアプリケーションが閉じられているのですか?実際に私は誰かが私の現在のコードを修正するのを助けることを捜しています。私は放送受信機を備えたアラームマネージャーは私にとって最高の解決策だと思う... – rami78

関連する問題