gpt4 book ai didi

android - 如何在 Android 中取消正在进行的闹钟

转载 作者:行者123 更新时间:2023-11-30 02:45:20 24 4
gpt4 key购买 nike

我正在制作一个应用程序,我想在几秒钟后取消警报(不是我的应用程序设置的)。

取消其他应用程序可能设置的闹钟的方法是什么?

我所拥有的是,当警报触发时,通知会发布在 Android 通知中心。

我从 android 文档中读到我需要 PendingIntent 来取消触发的警报。但是在这种情况下我怎样才能获得 PendingIntent?

我注意到我可以从发布到 Android 通知中心的警报通知中获取 contentIntent。我试图从这个 PendingIntent 中取消警报,但没有成功。

有什么方法可以获取触发警报的 PendingIntent?或者/以及取消闹钟?

最佳答案

这个技巧有点老了,但是却拯救了很多开发者。

假设在 ActivityOne 中我们启动了一个 AlarmManager,如下所示:

    AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, OnServiceReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 5290, i, 0);

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000, LOCAL_SERVICE_PERIOD, pi);

要在任何其他 Activity/Broadcastreceiver/Service 中取消此 AlarmManager,我们必须记住它的一些信息。

1:上下文:AlarmManager 使用的上下文,后跟其 PendingIntent。

2: PendingIntent ID: getBroadcast(context, 5290, i, 0); .它使 Pi 独一无二,这最重要。

因此我们必须将 PendingIntent id 保存在 SharedPreference 中,以便在取消时进行确认。

现在 AlarmManager 使用的 Context

在同一个 Activity(ActivityOne) 中,我们必须创建一个全局上下文来保存原始上下文。喜欢:

//Define it globaly in ActivityOne
private static Context mContext;

//create a public static method which holds the current context and share
public static Context getActivityOneContext() {
return ActivityOne.mContext;
}

//initialize it by assigning application context in onCreate() method
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xxx);
mContext = getApplicationContext();

//Or if this is a BroadCastReceiver ..use the current context and do same in onReceive()
//OnBootReceiver.mContext = context.getApplicationContext();

现在您可以在应用程序的任何位置取消 AlarmManager..

       AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent stopIntent = new Intent(ActivityOne.getActivityOneContext, OnServiceReceiver.class);
PendingIntent stopPI = PendingIntent.getBroadcast(ActivityOne.getActivityOneContext, 5290, stopIntent, 0);
mgr.cancel(stopPI);

关于android - 如何在 Android 中取消正在进行的闹钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25136821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com