2014-12-30 4 views
0

Я хочу, чтобы запустить задачу каждые X дней после того, как пользователь нажмет кнопкуalarmmanager не Android работает хорошо

есть мой код, но он не работает со мной

OnButtonClick

   Calendar calendar = Calendar.getInstance(); 
       calendar.set(Calendar.YEAR, Calendar.YEAR); 
       calendar.set(Calendar.MONTH, Calendar.MONTH); 
       calendar.set(Calendar.DAY_OF_MONTH, Calendar.DAY_OF_MONTH); 
       calendar.set(Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY); 
       calendar.set(Calendar.MINUTE, Calendar.MINUTE); 
       calendar.add(Calendar.MINUTE, 1); 

       AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
       Intent i = new Intent(ActionsActivity.this, SuggestService.class); 
       PendingIntent pi = PendingIntent.getService(ActionsActivity.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

       alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi); 
       //startService(i); 

сигнализации класс

public class Alarm extends BroadcastReceiver 
{  
@SuppressLint("Wakelock") 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
    wl.acquire(); 

    // Put here YOUR code. 
    Toast.makeText(context, "Alarm !!!", Toast.LENGTH_LONG).show(); 

    wl.release(); 
} 

public void SetAlarm(Context context) 
{ 
    AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, Alarm.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 10 * 1, pi); // Millisec * Second * Minute 
} 

класс обслуживания

public class SuggestService extends Service 
{ 
public void onCreate() 
{ 
    super.onCreate();  
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    super.onStartCommand(intent, flags, startId); 

    return START_STICKY; 
} 


@Override 
public void onStart(Intent intent, int startId) 
{ 
    super.onStart(intent, startId); 

    PowerManager pm = (PowerManager) getBaseContext().getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
    wl.acquire(); 

    Toast.makeText(getBaseContext(), "Alarm !!!", Toast.LENGTH_LONG).show(); 

    wl.release(); 
} 

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

OnClick the Toast show немедленно! :(

кто может помочь?

+0

Я думаю, вы должны показать больше кода - во фрагменте кода выше, я не могу увидеть любой Тост под названием во OnClick() –

+0

@ АндрейКопейко это в ** onReceive ** метод –

+0

@ AndreyKopeyko Я не хочу шоу Toast onClick, я хочу его после X раз после Click –

ответ

0

по крайней мере одна проблема заключается в Calendar использовании Эта строка:.

  Calendar calendar = Calendar.getInstance(); 

получает экземпляр с текущим временем. Затем установить год на «1» с этой линией ...

  calendar.set(Calendar.YEAR, Calendar.YEAR); 

Поскольку Calendar.YEAR = «1» ... И эти другие линии делают подобные «странные» настройки.

  calendar.set(Calendar.MONTH, Calendar.MONTH); 
      calendar.set(Calendar.DAY_OF_MONTH, Calendar.DAY_OF_MONTH); 
      calendar.set(Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY); 
      calendar.set(Calendar.MINUTE, Calendar.MINUTE); 

Не использовать любой из них, просто сделать это:

  Calendar calendar = Calendar.getInstance(); 
      calendar.add(Calendar.MINUTE, 1); 
+0

, когда я это делаю, он повторяется каждый час @NextMinute, как исправить это и работать только один раз? спасибо –

+0

Ты спросил, почему это не работает, на что я ответил. Вы устанавливаете будильник для повторения с этой строкой: am.setInexactRepeating (AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 10 * 1, pi); // Millisec * Second * Minute Почему бы ожидать, что это не повторится? Я думаю, что это отдельный вопрос, не так ли? – Jim

+0

Okey, Спасибо, (y) –

0

Я думаю, что проблема приходит, потому что сигнал тревога срабатывает сразу же после того, как он был установлен.

Я имел эту проблему в моем коде, и я победил его, несколько смещая время срабатывания будильника в будущее:

am.setRepeating(AlarmManager.ELAPSED_REALTIME, 
       SystemClock.elapsedRealtime() + 5*1000, 
       MAINTENANCE_INTERVAL, 
       pendingIntent); 
Смежные вопросы