如何从活动中获取服务上下文?
Posted
技术标签:
【中文标题】如何从活动中获取服务上下文?【英文标题】:how to get a service context from an activity? 【发布时间】:2013-11-23 13:51:20 【问题描述】:我需要从活动中获取服务上下文,因为我正在服务中创建警报,并且我想在活动中将其删除,因此必须使用相同的上下文我可以将此服务的上下文保存在 @ 987654321@ 作为一个字符串,但是我怎样才能将这个字符串转换为一个上下文呢?
我的报警代码是:
Intent intentAlarm = new Intent(getApplicationContext(), TimeAlarm.class);
//add the notification body to the intent:
intentAlarm.putExtra("Notif_body", Notif_Body);
// create the object
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//set the alarm for particular time
alarmManager.set(AlarmManager.RTC_WAKEUP,new GregorianCalendar().getTimeInMillis()+60*1000, PendingIntent.getBroadcast(getApplicationContext(),1,intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
我如何删除它?
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent i = new Intent(getApplicationContext(),TimeAlarm.class);
PendingIntent displayIntent = PendingIntent.getBroadcast(getApplicationContext(),1,i, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.cancel(displayIntent);
为什么这不起作用?
【问题讨论】:
您不必使用相同的上下文。只需使用 Activity 上下文,一切都会正常工作。 或者,在这两种情况下都使用应用程序上下文。 ok 将在这两种情况下都使用应用程序上下文,因为我认为需要相同的上下文,因为当我使用另一个上下文时我无法删除警报,会尝试一下,谢谢。 我想你在找getApplicationContext()
很抱歉您的 cmets 非常有用但无法标记它们..
【参考方案1】:
您好,我需要从活动中获取服务上下文
不,你没有。
所以必须使用相同的上下文
不,你没有。
我可以在 sharedpreferences 中将此服务的上下文保存为字符串
不,你不能。
我认为需要相同的上下文
不,你没有。
当我使用另一个上下文时,我无法删除警报
那么您的代码还有其他问题。您可以使用完全不同的进程取消警报,更不用说不同的Context
。
【讨论】:
请检查我添加的代码我不知道为什么它不起作用。 @user2849412:尝试摆脱FLAG_UPDATE_CURRENT
的 PendingIntent
,您在 cancel()
中使用。除此之外,还可以使用 adb shell dumpsys alarm
来查看您是否安排了 另一个 警报,可能来自您的应用程序的某些先前运行。您可以通过卸载并重新安装您的应用程序或通过设置中的强制停止来消除警报。
@user2849412:你有两个名为TimeAlarm
的类吗?
不确定我什至添加了 intentAlarm.putExtra("Notif_body", "");到它,因为我认为这是原因,但仍然无法删除它..以上是关于如何从活动中获取服务上下文?的主要内容,如果未能解决你的问题,请参考以下文章