2016-11-13 37 views
0

我已经创建了一个意向服务,它应该以用户定义的时间间隔向服务器发送数据,但在我的情况下,时间间隔不能由警报管理器正确维护。你能指导我在哪里做错误吗?我想在设备处于睡眠或空闲模式时运行服务。这是我的代码。意图服务时间间隔未维护

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,所以报警器应在15分钟发送意图,而它在10分钟发送。

回答

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而不是ElapsedTime,尽管按照文档,当RTC处于睡眠模式(挂钟时间,UTC)时,它不计算时间。仍然可以使用? –

+0

我正在使用此代码在22:00每天运行。它正在执行确切的时间段。 –

+0

有一点很清楚,如果我想以15分钟的间隔运行,我将用15 * 60 * 1000替换_alarm。但是在哪里放置时间就像是想在20点发射意图。 –