2016-04-23 48 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); 
    } 
} 

我如何開始在App啓動服務:

Intent i = new Intent(this, BackupService.class); 
      startService(i); 

但UNKN嗷嗷原因報警不執行每次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 

我怎麼可以讓它運行按需每x時間(我會給用戶選項做在一個預定的時間備份)

+1

請參閱文檔爲['AlarmManager'(http://developer.android.com/reference/android/app/AlarmManager.html)。從KitKat開始,如果你的'targetSdkVersion'> = 19,'setRepeating()'是不精確的。您需要使用'setExact()',並在每次觸發時再次將鬧鐘設置爲所需的時間間隔。 –

回答

0

因爲我需要使用的API 16> =,我改變

現在我calll的starTimer的onStartCommand內,所以當它運行在第一次開始計時,當定時器被觸發,重新啓動並繼續,現在其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); 
    }