为什么我的警报没有在Android Studio中触发?

时间:2020-03-18 14:06:13

标签: java android alarmmanager

我正在尝试使用PendingIntentAlarmManager创建一个简单的警报,但是我的警报没有触发。

我创建了一个用于接收警报的其他类,但我认为它没有被调用。它也没有显示任何错误。

我将仅添加相关代码,如果您需要更多信息,请询问。

这是我设置闹钟的地方:

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 个答案:

答案 0 :(得分:2)

好的,我找到了解决方案!

我只需要在清单中添加一个接收器标签,这真是我所料想不到的!

<receiver android:name=".AlarmReceiver"></receiver>
相关问题