2016-11-13 3 views
0

사용자 정의 간격으로 서버에 데이터를 보내야하는 인 텐트 서비스를 만들었지 만 제 경우에는 간격이 알람 관리자에 의해 올바르게 유지되지 않습니다. U 오류가 발생한 곳을 안내 할 수 있습니까? 장치가 절전 모드 또는 유휴 모드에있는 동안 서비스를 실행하고 싶습니다. 여기 내 코드가있다.의도 서비스 시간 간격 유지되지 않음

public void sosalarmson() { 
     Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class); 
     final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, AlarmReceiver.receivercode, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), Integer.parseInt(userdefinedinterval) *60* 1000, pendingIntent); 
     Toast.makeText(FinalSettings.this, "alarm On", Toast.LENGTH_SHORT).show(); 
    } 

이상적으로, 나는 15 사용자의 입력을주고, 그래서 10 분에서 보내는 반면, 알람, 15 분에 의도를 보내야합니다.

답변

0

이 코드를 사용하고 그것을 완벽하게 작동된다

정의 :

final int SDK_INT = Build.VERSION.SDK_INT; 
AlarmManager al; 
PendingIntent fintent; 
Intent notif; 

내가 직접 알람 manager._alarm를 사용하여 서비스를 시작하고하면 미리 정의 된 간격입니다.

long _alarm; 

     Calendar now = Calendar.getInstance(); 
     Calendar wakeupcall = Calendar.getInstance(); 
     wakeupcall.setTimeInMillis(System.currentTimeMillis()); 
     wakeupcall.set(Calendar.HOUR_OF_DAY, 18); 
     wakeupcall.set(Calendar.MINUTE, 30); 

     if (wakeupcall.getTimeInMillis() <= now.getTimeInMillis()) 
      _alarm=wakeupcall.getTimeInMillis() + (AlarmManager.INTERVAL_DAY+1); 
     else 
      _alarm=wakeupcall.getTimeInMillis(); 

al = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     notif= new Intent(this,TestNotifyService.class); 
     fintent = PendingIntent.getService(this,0,notif,0); 

if (SDK_INT < Build.VERSION_CODES.KITKAT) { 
      al.set(AlarmManager.RTC_WAKEUP,_alarm, fintent); 
     } 
     else if (Build.VERSION_CODES.KITKAT <= SDK_INT && SDK_INT < Build.VERSION_CODES.M) { 
      al.setExact(AlarmManager.RTC_WAKEUP,_alarm,fintent); 
     } 
     else if (SDK_INT >= Build.VERSION_CODES.M) { 
      al.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,_alarm,fintent); 
     } 
+0

워드 프로세서 대신 RTC를 사용했지만 RTC는 절전 모드 (월 시계 시간 (UTC))에있는 시간을 계산하지 않습니다. 아직도 사용할 수 있습니까? –

+0

이 코드는 매일 22:00에 실행됩니다. 그리고 정확한 시간주기를 실행하고 있습니다. –

+0

한 점은 분명히 15 분 간격으로 실행하려면 _alarm을 15 * 60 * 1000으로 바꿉니다. 그러나 20시 시간에 의도를 발사하는 것과 같은 시간을 어디에 두어야합니까? –