4

У меня возникла проблема с получением моего pendingIntent. Я сделал некоторые проблемы с использованием logcat и т. Д., И в конце концов я почти уверен, что моя проблема действительно в моем методе pendingIntent. Времена, которые я установил, верны, и метод получает вызов, но ничего не происходит в назначенное время. Вот метод, который я использую для создания pendingIntentВ ожидании намерения получите услугу

public void scheduleAlarm(){ 
    Log.d("Alarm scheduler","Alarm is being scheduled"); 
    Intent changeVol = new Intent(); 
    changeVol.setClass(this, VolumeService.class); 
    PendingIntent sender = PendingIntent.getService(this, 0, changeVol, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, time, sender); 
    //Toast.makeText(this, "Volume Adjusted!", Toast.LENGTH_LONG).show(); 
} 

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

public class VolumeService extends Service{ 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.d("Service", "Service has been called."); 
    Toast.makeText(getApplicationContext(), "Service Called!", Toast.LENGTH_LONG).show(); 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

} 

Бревно в scheduleAlarm() классе работает так, как я планировал, но потом ничего не происходит, так что я предположим, что это мой pendingIntent. Спасибо заранее!

+0

Не могли бы вы предоставить, как вы получите значение времени? Используете ли вы систему. currentTimeMillis() + некоторое время для задержки? Вы определили службу в AndroidManifest.xml? –

+0

@ VladimirLichonos Время предоставляется пользователем с помощью диалогового окна 'timePicker ', и я проверил triple с помощью logCat, чтобы убедиться, что время выбрано правильно; и это. Например, я проверил это ранее сегодня, и я ввел 3:45 pm (MST), и когда я проверил значение 'long', оно было правильно опубликовано 30:45 (30 августа). вторую часть вашего вопроса, я добавил в манифест, используя следующий фрагмент ''. –

+0

Ну, мне кажется, это прекрасно, но я бы попытался проверить больше с отменой тревоги и отменить и снова создать ожидающее намерения. Также пытается использовать только System.currentTimeMillis() для целей тестирования. Он должен работать и может показать вам, где проблема. –

ответ

6

Выяснил это! Проблема была в классе Service, я тоже изменил некоторые другие вещи. Однако я считаю, что основная проблема заключалась в том, что в моем классе обслуживания в методе onCreate я пытался запустить свой код. Но это должно было быть сделано в onStartCommand методом

public class VolumeService extends Service{ 

@Override 
public void onCreate() { 
    super.onCreate(); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(getApplicationContext(), "Service started", Toast.LENGTH_LONG).show(); 
    return START_NOT_STICKY; 
} 


@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

} 

и несколько были внесены изменения в классе, начиная службу, как показано здесь:

public void scheduleAlarm(){ 
    Log.d("Alarm scheduler","Alarm is being scheduled"); 
    Intent intent = new Intent(AlarmSettings.this, VolumeService.class); 
    PendingIntent pintent = PendingIntent.getService(AlarmSettings.this, 0, intent, 0); 
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarm.set(AlarmManager.RTC_WAKEUP, time, pintent); 
} 
+0

это работает для вас, даже когда приложение убито? Я пробовал аналогичный код, но, похоже, он работает только в том случае, если приложение все еще живое (что не соответствует точке ...). AlarmManager даже не запускает тревогу в соответствии с логарифмом, не говоря уже о том, чтобы использовать намерение. –

+0

@ SagiMann-TROPHiT да для меня это нормально работает, даже если оно убито, как вы сказали, это своего рода точка. Извините, я не могу больше помочь. –

Смежные вопросы