- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我设置了一个闹钟,我想在不打开 Activity 的情况下使用通知操作按钮禁用正在进行的闹钟。
我在下面附上了我的全部代码。
当用户设置闹钟时,它会调用广播接收器,然后我会从他们那里调用我的铃声服务来启动铃声。它会触发一个通知。在该通知中,它将有一个禁用按钮。我已经完成了我在互联网上找到的所有资源。但是
通知上的禁用按钮不起作用。哪里是我的错
onToggled 按钮从主 Activity 启动警报
public void OnToggleClicked(View view) {
long time;
if (((ToggleButton) view).isChecked()) {
Toast.makeText(MainActivity.this, "ALARM ON", Toast.LENGTH_SHORT).show();
Calendar calendar = Calendar.getInstance();
if (Build.VERSION.SDK_INT >= 23) {
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute());
} else {
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute());
}
intent = new Intent(this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
// setRepeating() lets you specify a precise custom interval--in this case,
// 1 minutes.
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60, pendingIntent);
} else {
alarmManager.cancel(pendingIntent);
Toast.makeText(MainActivity.this, "ALARM OFF", Toast.LENGTH_SHORT).show();
}
}
我的广播接收器类
public class AlarmReceiver extends BroadcastReceiver {
public static Ringtone ringtone;
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm! Wake up! Wake up!", Toast.LENGTH_LONG).show();
// using service class
Intent i = new Intent(context, RingtonePlayingService.class);
context.startService(i);
createNotification(context);
}
public void createNotification(Context context) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(android.R.drawable.ic_dialog_alert)
.setContentTitle("It is prayer time")
.setContentText("Prayer")
.setSmallIcon(R.mipmap.ic_launcher)
.setSubText("Tab to cancel the ringtone")
.setPriority(NotificationCompat.PRIORITY_HIGH);
//To add a dismiss button
Intent dismissIntent = new Intent(context, RingtonePlayingService.class);
dismissIntent.setAction(RingtonePlayingService.ACTION_DISMISS);
PendingIntent pendingIntent = PendingIntent.getService(context,
123, dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action action = new NotificationCompat.Action
(android.R.drawable.ic_lock_idle_alarm, "DISMISS", pendingIntent);
builder.addAction(action);
// end of setting action button to notification
Intent intent1 = new Intent(context, MainActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(context, 123, intent1,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pIntent);
NotificationManager notificationManager = (NotificationManager)
context.getSystemService(NOTIFICATION_SERVICE);
Notification notification = builder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(123, notification);
}
我的铃声播放服务类
public class RingtonePlayingService extends Service{
private static final String TAG = RingtonePlayingService.class.getSimpleName();
private static final String URI_BASE = RingtonePlayingService.class.getName() + ".";
public static final String ACTION_DISMISS = URI_BASE + "ACTION_DISMISS";
private Ringtone ringtone;
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.d(TAG, "onStartCommand");
if(intent == null) {
Log.d(TAG, "The intent is null.");
return START_REDELIVER_INTENT;
}
Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if (alarmUri == null) {
alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
ringtone = RingtoneManager.getRingtone(this, alarmUri);
ringtone.play();
String action = intent.getAction();
if(ACTION_DISMISS.equals(action))
dismissRingtone();
return START_NOT_STICKY;
}
public void dismissRingtone() {
Intent i = new Intent(this, RingtonePlayingService.class);
stopService(i);
}
@Override
public void onDestroy() {
ringtone.stop();
}
最佳答案
那是我的错
当我单击禁用通知时,它再次调用接收器类,这就是铃声继续播放的原因。所以我进行了一些修改,它工作正常。
public class RingtonePlayingService extends Service {
private static final String TAG = RingtonePlayingService.class.getSimpleName();
private static final String URI_BASE = RingtonePlayingService.class.getName() + ".";
public static final String ACTION_DISMISS = URI_BASE + "ACTION_DISMISS";
private Ringtone ringtone;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand");
if (intent == null) {
Log.d(TAG, "The intent is null.");
return START_REDELIVER_INTENT;
}
String action = intent.getAction();
if (ACTION_DISMISS.equals(action))
dismissRingtone();
else {
Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if (alarmUri == null) {
alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
ringtone = RingtoneManager.getRingtone(this, alarmUri);
ringtone.play();
}
return START_NOT_STICKY;
}
public void dismissRingtone() {
// stop the alarm rigntone
Intent i = new Intent(this, RingtonePlayingService.class);
stopService(i);
// also dismiss the alarm to ring again or trigger again
AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
aManager.cancel(pendingIntent);
// Canceling the current notification
NotificationManager notificationManager =
(NotificationManager)getSystemService(getApplicationContext().NOTIFICATION_SERVICE);
notificationManager.cancel(321);
}
@Override
public void onDestroy() {
ringtone.stop();
}}
关于java - 通知操作按钮不会停止闹钟铃声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43253721/
我正在使用 NotificationManager 构建器在我的应用程序中显示警报。我知道 notify 方法的第一个参数是一个 id,如果它已经可见,框架将更新通知,但是如果我将警报设置为播放铃声或
我想在我的应用程序中使用 iPhone 的铃声。这可能吗?请帮助我解决这一点, 谢谢 最佳答案 您无法以编程方式使用或更改可用的铃声。很抱歉这么说,但苹果实在太保守了。 关于iphone - 如何在应
我正在尝试禁用 vim 上的错误铃声,包括视觉和音频。但是我不能让他们离开。 我的 vimrc 中有以下内容: " Disable annoying beeping set noerrorbells
我的应用程序播放闹钟。在 Android 声音设置中,此声音由“铃声音量” slider 控制,而不是由“闹钟音量” slider 控制。如何更改由“闹钟音量”控制的声音? public void
我想做的是创建类似应用程序的警报。主要编码完成。目前它播放一首添加到我的 apk(原始文件夹)中的歌曲。 我想添加一个功能,让用户可以选择他/她自己的歌曲作为闹钟声音。它可以是来自 SD 卡、内部的文
我想从我的应用程序中从云端下载 mp3 文件,然后将下载的音频文件设置为铃声。我通过 stackoverflow 尝试了很多解决方案,并花了很多时间在谷歌中搜索,但没有任何好的结果。 更新: 我已经解
我正在尝试添加某种回声命令,使我的菜单在准备好供用户输入时发出蜂鸣声或铃声。如果有任何可能的帮助,我将不胜感激,谢谢! loop=y while [ "$loop" = y ] do clear
我开始使用以下方式播放声音:(工作) RingtoneManager.getRingtone(this, Uri.parse(callerRing)).play(); 并尝试使用以下方式停止播放声音:
我如何在 React Native 中获取系统铃声列表,例如铃声、通知铃声,以便我可以让用户选择将它们设置为通知铃声? 我查看了一些库,如 react-native-ringtone-manager
我的应用程序必须能够在收到推送通知时无论如何播放警报声。 有没有办法配置 Audio Session 来播放声音: 并且不遵守无声开关(可能会遵守路线) 在推送消息到达时(可以是无声的)并且应用程序是
我正在尝试在我的 PhoneGap 应用程序中播放 mp3 音调。在 iOS 上运行良好,但在 Android (4.2.2) 上无法播放铃声。 html js: document.getE
我想将我的资源文件夹中的铃声设置为默认铃声。现在我发现这是不可能的,因为无法从外部访问 Assets 。因此,我必须将文件从我的 Assets 复制到 SD,或者我使用内容提供程序。我认为最后一个是更
我想在我的 Android 应用程序中播放来自(铃声)URI 的声音。但是,我想以任意音量播放此声音,并且系统音量(例如媒体和铃声音量)不会影响播放。 我一直在翻阅 API 文档,但不知所措。这在 A
我是一名优秀的程序员,十分优秀!