2016-04-23 4 views
0

MyBroadCastサービスが

パブリッククラスBackupBroadCastがWakefulBroadcastReceiver {私はアプリケーション起動時にサービスを開始する方法

@Override 
    public void onReceive(Context context, Intent intent) { 
     Intent i = new Intent(context, BackupService.class); 
     context.startService(i); 
    } 
} 

たMyService

public class BackupService extends Service { 

    public int REQUEST_CODE = 99999; 

    @Override 
    public void onCreate() { 
     Log.d("Service", "onCreate"); 
     ativarTemporizador(); 
     super.onCreate(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     //HERE COME THE CODE TO EXECUTE EVERY x time the alarm call the service 
     Log.d("Service", "onStartCommand"); 
     return super.onStartCommand(intent, flags, startId); 
    } 

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


    public void ativarTemporizador() { 
     Log.d("Service", "Start Timer"); 
     Intent intent = new Intent(getApplicationContext(), BackupBroadCast.class); 
     final PendingIntent pIntent = PendingIntent.getBroadcast(this, REQUEST_CODE, 
       intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
      alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() /*Start Right NOW*/, 
        (10000 /*Repeat Every 10seconds*/), pIntent); 
    } 
} 

を拡張して繰り返しませんunkn OW理由アラームは、(iが設定のような)各10秒サービス

それは

04-22 23:13:47.118 -> onCreate 
04-22 23:13:47.118 -> Start Timer 
04-22 23:13:47.118 -> onStartCommand 
04-22 23:14:10.758 -> onStartCommand 
04-22 23:15:10.868 -> onStartCommand 
04-22 23:16:11.288 -> onStartCommand 
04-22 23:16:48.998 -> onStartCommand 
04-22 23:18:11.498 -> onStartCommand 

がどのように私はそれをオンデマンドごと×時間を実行させることができ、ランダムな時間を持っているを実行していない(私は、ユーザーの選択肢を提供します私は、API 16> =を使用する必要があるため)所定の時間に

+1

に感謝[ 'AlarmManager'](http://developer.android.com/reference/android/app/AlarmManager.html)のためのドキュメントを参照してください。 KitKatの 'targetSdkVersion'> = 19の場合、' setRepeating() 'は不正確です。あなたは 'setExact()'を使う必要があり、起動するたびに必要な間隔でアラームを再設定する必要があります。 –

答えて

0

をバックアップを行うために、私は今、私がとき、それは最初に実行したときにタイマーを開始し、onStartCommand内starTimerをcalll

を変更しましたタイマーが起動され、再起動して、今100%正しく時間に

はあなたに

public void startTimer() { 
     Intent intent = new Intent(getApplicationContext(), BackupBroadCast.class); 
     final PendingIntent pIntent = PendingIntent.getBroadcast(this, REQUEST_CODE, 
       intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
      alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, pIntent); 
    } 
関連する問題