android - 停止来自不同活动的警报
问题描述
好的,它是这样的;DeviceListActivity 启动警报。然后,AlarmReceiver 创建一个名为 AlarmActivity 的活动来完成一些工作并停止警报并自行终止。但我无法阻止警报。我的代码如下。
设备列表活动:
public void startAlarm(View view) {
Calendar calNow = Calendar.getInstance();
calNow.set(Calendar.SECOND, calNow.get(Calendar.SECOND) + 1);
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calNow.getTimeInMillis(), pendingIntent);
}
报警接收器:
public void onReceive(Context context, Intent intent) {
Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if (alarmUri == null) {
alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
ringtone.play();
Intent alarmActivity = new Intent();
alarmActivity.setClassName(context.getPackageName(),AlarmActivity.class.getName());
alarmActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(alarmActivity);
}
警报活动:
public void stopAlarm(View view) {
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
finish();
}
解决方案
在警报活动中,尝试以下代码:
public void stopAlarm(View view) {
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 1, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// add this if condition to check and cancel the alarm if AlarmManager is not null
if (alarmManager!= null) {
alarmManager.cancel(pendingIntent);
finish();
}
推荐阅读
- css - 悬停时无法缩放多边形
- ffmpeg - ffmpeg:色度键(绿屏过滤器)短视频连续循环到实时视频
- ruby - 为什么我不能挽救在另一个类中定义的这个自定义错误?
- tikz - PGFPlots 中带有对数 y 轴的条形图:如何移动条形底部
- html - 在这段代码中,1 个展示区是如何变得大于 1 个 top-box-a 或 b 区域的?
- php - 如何在 foreach 变体 laravel 中上传图片
- google-analytics - Google Analytics API:获取每天/每周的总事件
- ios - 选择 Table View Controller Cell 时不会出现 View Controller
- docker - docker compose 内部的 Docker 通信以及与 docker 外部的数据库的通信
- c# - EF Core 3.1 无法映射属性“Geometry.UserData”