Android 警报在应用程序中不起作用
我试图在用户指定的时间触发警报。所以我有timepickerdialog,用户可以从中选择时间。它向我显示警报设置为指定的时间,但它不工作。下面是代码 这是我的主要活动Android 警报在应用程序中不起作用,android,alarmmanager,alarm,Android,Alarmmanager,Alarm,我试图在用户指定的时间触发警报。所以我有timepickerdialog,用户可以从中选择时间。它向我显示警报设置为指定的时间,但它不工作。下面是代码 这是我的主要活动 Calendar currentTime = Calendar.getInstance(); int hour = currentTime.get(Calendar.HOUR_OF_DAY); int minute = currentTime.get(Calendar.MINUTE); TimePickerDialog time
Calendar currentTime = Calendar.getInstance();
int hour = currentTime.get(Calendar.HOUR_OF_DAY);
int minute = currentTime.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
hours = hourOfDay;
minutes = minute;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hours);
calendar.set(Calendar.MINUTE, minutes);
calendar.set(Calendar.SECOND, 0);
Intent intent1 = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0,intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
Toast.makeText(getApplicationContext(), "Alarm has been set for "+hours+":"+minutes,Toast.LENGTH_LONG).show();
}
}, hour, minute, false);
timePickerDialog.setTitle("Select time");
timePickerDialog.show();
这是我的AlarmReceiver.class
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Uri alarmRingtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if(alarmRingtone == null){
alarmRingtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
Ringtone ringtone = RingtoneManager.getRingtone(context,alarmRingtone);
ringtone.play();
}
这是我的AndroidManifest文件
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<receiver
android:name=".AlarmReceiver"
android:exported="true"
android:enabled="true"/>
请尝试以下代码,这将是你的工作
/**
* Method for start Alarm on Every minute
*
* @param minutes Minute when you want to start after current time
* @param context
*/
public static void startAlarm(Context context, int minutes) {
Logger.print("AlarmReceiver startAlarm called");
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.setAction("testAPP");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 123451, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
manager.cancel(pendingIntent);
long alarmPeriodicTime = System.currentTimeMillis() + (minutes*60*1000);
if (Build.VERSION.SDK_INT >= 23) {
manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
} else if (Build.VERSION.SDK_INT >= 19) {
manager.setExact(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
} else {
manager.set(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
}
}
在我的听筒里,我又在呼叫同样的电话
startAlarm(context, Prefs.getLocationUpdateInterval(context));
是否重复?对于重复,请在广播接收器中放入相同的代码,它将起作用WakefulBroadcastReceiverService.class是什么?它与AlarmReceiver类相同吗?另外,我应该在哪里编写此方法-MainActivity或AlarmReceiver类?是的,它是相同的AlarmReceiver。请立即检查。授予权限android.permission.SET\u ALARM