Android 警报管理器不工作
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10684077/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
AlarmManager not working
提问by dinesh707
I need to start the activity AlarmReceiver
after 10 seconds (for example). I need it to be activated without running the app. But whether the app runs or not the AlarmReceiver
do not get called. Any suggestions?
我需要AlarmReceiver
在 10 秒后开始活动(例如)。我需要在不运行应用程序的情况下激活它。但是无论应用程序是否运行AlarmReceiver
都不会被调用。有什么建议?
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 111, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
//alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
//+ (10 * 1000), pendingIntent);
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
回答by dinesh707
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String message = "Hellooo, alrm worked ----";
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
Intent intent2 = new Intent(context, TripNotification.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent2);
}
public void setAlarm(Context context){
Log.d("Carbon","Alrm SET !!");
// get a Calendar object with current time
Calendar cal = Calendar.getInstance();
// add 30 seconds to the calendar object
cal.add(Calendar.SECOND, 30);
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
}
}
This is the final code i managed to get working. You need to add
这是我设法开始工作的最终代码。你需要添加
<receiver android:process=":remote" android:name="AlarmReceiver"></receiver>
just above the </application>
tag in Manifest file.
就</application>
在清单文件中的标签上方。
This will set an alarm to trigger in 30 seconds after calling the method SetAlarm()
这将设置闹钟在调用该方法后 30 秒内触发 SetAlarm()
回答by Prat
As of now, it's not possible to start Alarm without running the app, you must once run your respective app to activate your alarm.. For this....!!
截至目前,在不运行应用程序的情况下无法启动警报,您必须运行各自的应用程序以激活警报..为此......!
In Your ALARM_ACTIVITY :
在您的 ALARM_ACTIVITY 中:
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(ALARM_ACTIVITY.this,ALARM_RECEIVER.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(SetReminder.this, ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeInMillis() + 1000, pendingIntent);
In Your ALARM_RECEIVER:
在您的 ALARM_RECEIVER 中:
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification = new Notification(R.drawable.alarmicon, "charSequence", System.currentTimeMillis());
notification.setLatestEventInfo(context, "alarmTitle", "charSequence", pendingIntent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(1, notification);
回答by kellogs
And if it is still not working getting rid of the android:process=":remote"
part may help. Worked for me :)
如果它仍然不起作用,摆脱该android:process=":remote"
部分可能会有所帮助。为我工作:)
回答by Edward Brey
So long as your app has run once to establish the alarm with AlarmManager
, the alarm fires your intent even if your app isn't running. The exception is after a device restart. To start an alarm when the device restarts, implement a BroadcastReceiver
to set the alarm, and add the receiver to your manifest for ACTION_BOOT_COMPLETED
:
只要您的应用程序运行一次以使用 建立警报AlarmManager
,即使您的应用程序未运行,警报也会触发您的意图。例外是在设备重启之后。要在设备重新启动时启动警报,请实现 aBroadcastReceiver
以设置警报,并将接收器添加到您的清单中ACTION_BOOT_COMPLETED
:
<receiver android:name=".SampleBootReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
回答by Moses Kirathe
Also, In addition to the above,I think the methods in the AlarmActivity should be in the oncreate method of the LAUNCHER activity.. In this case, the Alarm Activvity should be the LAUNCHER activity of the app. this solved my problem
另外,除了上述之外,我认为AlarmActivity中的方法应该在LAUNCHER活动的oncreate方法中。在这种情况下,AlarmActivity应该是应用程序的LAUNCHER活动。这解决了我的问题