Android 报警管理器没有';我不工作
我试着让闹钟工作,但它什么也没用,我错了什么? 我的代码是Android 报警管理器没有';我不工作,android,alarmmanager,Android,Alarmmanager,我试着让闹钟工作,但它什么也没用,我错了什么? 我的代码是 Calendar cal = Calendar.getInstance(); Intent intent = new Intent(this, OnetimeAlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager am = (AlarmMan
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(this, OnetimeAlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() + 3000, sender);
我的广播接收器是这样的
public class OnetimeAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
}
}
这是一个内部类
我缺少什么?您必须注册广播接收器才能工作,它可以在AndroidManifest.xml中完成,也可以使用
Context.registerReceiver()方法动态完成
您可以阅读《开发人员指南》中关于注册接收者的内容,或者查看参考资料以了解如何执行此操作。这是有效的代码
添加到Manifest.xml:
...
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
...
<receiver android:process=":remote" android:name="Alarm"></receiver>
...
最好将OnetimeAlarmReceiver移到外部类。它不起作用,因为OnetimeAlarmReceiver(这是一个内部类,对吗?)不能在不实例化父类的情况下进行实例化。非常感谢这两个方面。我将它移动到一个外部类,并在清单中注册它,现在它工作得很好。
public class Alarm extends BroadcastReceiver
{
@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, "YOUR TAG");
wl.acquire();
// Put here YOUR code.
Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example
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.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 10), pi); // Millisec * Second * Minute
}
}