Почему мой будильник не срабатывает в Android Studio? - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь создать простой сигнал тревоги, используя PendingIntent и AlarmManager, но мой сигнал тревоги не срабатывает.

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

Я собираюсь добавить только соответствующий код, и если вам нужна дополнительная информация, пожалуйста, спросите.

Это класс, в котором я установил будильник:

public class setAlarm extends AppCompatActivity {

TimePicker alarmTimePicker;
PendingIntent pendingIntent;
AlarmManager alarmManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_alarm);
    alarmTimePicker = (TimePicker) findViewById(R.id.simpleTimePicker);
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
}

public void setAlarm(){
    long time;

    Toast.makeText(this, "Alarm ON!", Toast.LENGTH_SHORT).show();
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
    calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());
    Intent intent = new Intent(this, AlarmReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

    time=(calendar.getTimeInMillis()-(calendar.getTimeInMillis()%60000));
    if(System.currentTimeMillis()>time)
    {
        if (calendar.AM_PM == 0)
            time = time + (1000*60*60*12);
        else
            time = time + (1000*60*60*24);
    }
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, 10000, pendingIntent);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();

    inflater.inflate(R.menu.alarm_set_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.saveAlarm:
            setAlarm();
            break;
    }
    return super.onOptionsItemSelected(item);
}

}

А это AlarmReceiver. java

public class AlarmReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Toast.makeText(context, "Alarm! Wake up! Wake up!", Toast.LENGTH_LONG).show();
        Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
        if (alarmUri == null)
        {
            alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        }
        Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
        ringtone.play();
    }
}

1 Ответ

2 голосов
/ 18 марта 2020

Хорошо, я нашел решение!

Мне просто нужно было добавить тег получателя в мой манифест, чего я действительно не ожидал!

<receiver android:name=".AlarmReceiver"></receiver>
...