是否可以创建一个在闹钟响起时触发的JobService?
我以前在广播接收器的清单中有这个代码:
<action android:name="com.android.deskclock.ALARM_ALERT" />
<action android:name="com.samsung.sec.android.clockpackage.alarm.ALARM_ALERT" />
<!-- <action android:name="com.samsung.sec.android.clockpackage.alarm.ALARM_DONE" /> -->
<action android:name="com.htc.android.worldclock.ALARM_ALERT" />
<action android:name="com.htc.android.ALARM_ALERT" />
<action android:name="com.sonyericsson.alarm.ALARM_ALERT" />
<action android:name="com.sonyericsson.organizer.Organizer_WorldClock" />
<action android:name="com.sonyericsson.organizer.Organizer" />
<action android:name="com.lge.clock.AlarmClockActivity" />
<action android:name="com.lge.clock.DefaultAlarmClockActivity" />
<action android:name="com.lge.alarm.alarmclocknew" />
<action android:name="zte.com.cn.alarmclock.ALARM_ALERT" />
<action android:name="com.motorola.blur.alarmclock.ALARM_ALERT" />
<!-- Third party Alarms -->
<action android:name="com.mobitobi.android.gentlealarm.ALARM_INFO" /> <!-- Gentle Alarm -->
<action android:name="com.urbandroid.sleep.alarmclock.ALARM_ALERT" /> <!-- Sleep As Android -->
<action android:name="com.splunchy.android.alarmclock.ALARM_ALERT" /> <!-- Alarmdroid (1.13.2) -->
<action android:name="net.havchr.mr2.services.AlarmNoiser" /> <!-- Morning Routine -->
<action android:name="net.havchr.mr2.broadcastreceivers.AlarmBroadcastReceiver" /> <!-- Morning Routine -->
<action android:name="net.havchr.mr2.services.FlicButtonTurnOffAlarmService" /> <!-- Morning Routine -->
<action android:name="net.havchr.mr2.broadcastreceivers.ALARM_ALERT" /> <!-- Morning Routine -->
<action android:name="net.havchr.mr2.services.ALARM_ALERT" /> <!-- Morning Routine -->
<action android:name="net.havchr.mr2.ALARM_ALERT" /> <!-- Morning Routine -->
<action android:name="net.havchr.mr2.ALARM_ALERT_SERVICE" /> <!-- Morning Routine -->
<action android:name="net.havchr.mr2.ALARM_NOTIFICATION_SERVICE" /> <!-- Morning Routine -->
<action android:name="net.havchr.mr2.FLIC_LISTENER_SERVICE" /> <!-- Morning Routine -->
<action android:name="REFRESH_THEM_VIEWS" /> <!-- Morning Routine -->
<action android:name="com.vp.alarmClockPlusDock" /> <!-- Alarm Clock Plus -->
但它在Android 8 Oreo中不再有效。 警报响起时有没有办法处理某些任务?例如,当用户在早上醒来时,我想显示“早安消息”。
答案 0 :(得分:0)
是否可以创建一个在闹钟响起时触发的JobService?
不,抱歉。
但它在Android 8 Oreo中不再有效。
您正在处理来自~20个闹钟应用程序的警报广播,这是使用中的闹钟应用程序的一小部分。当闹钟响起时,不需要第三方闹钟应用程序告诉其他应用程序。
答案 1 :(得分:0)
要解决这个问题,我需要创建一个复杂的解决方法。但它的确有效。让我解释一下我做了什么。
我首先创建一个NotificationListenerService来读取设备中显示的每个通知。 当然,您需要通过以下方式申请许可:
startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
然后,在onNotificationPosted()函数中,我这样做:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (sbn.getPackageName().equalsIgnoreCase("com.google.android.deskclock")) {
//The Android standard clock app is displaying a notification. We still need to check that the notification is because the alarm is going off right now, and not because the user has set an alarm at a specific time and the system displays de clock icon:
oNotification = sbn.getNotification();
String s1 = "" + oNotification.extras.getCharSequence(Notification.EXTRA_TITLE);
if(s1.equalsIgnoreCase("Alarm") || s1.equalsIgnoreCase("Alarma") || s1.equalsIgnoreCase("Alarme") || s1.equalsIgnoreCase("Sveglia") || s1.equalsIgnoreCase("Будильник") || s1.equalsIgnoreCase("Alarmă") || s1.equalsIgnoreCase("المنبه") || s1.equalsIgnoreCase("Wecker") || s1.equalsIgnoreCase("Ébresztő") || s1.equalsIgnoreCase("Wekker") || s1.equalsIgnoreCase("Будильник") || s1.equalsIgnoreCase("闹钟") || s1.equalsIgnoreCase("鬧鐘") ) { //En varios idiomas
//Alarm is going off right now!!!!
}
}
}
我检查发布的通知是否属于标准的Android闹钟应用程序(com.google.android.deskclock)。
然后,我需要区分一个常规通知,显示警报是在特定时间设置的,而不是通知实际警报。
在看了几个例子之后,我发现当闹钟响起时,它在Notification.EXTRA_TITLE字段中有“Alarm”字样。 您需要注意,因为在其他情况下,此字段可能为null或具有文件“待处理警报”。但是,当它关闭时,它只是“警报”。
我还将设备的语言更改为主要语言(英语,西班牙语,中文,法语,德语,俄语...),并且可以将其更改为Alarma,Alarme,Wecker,Ébresztő,المنبه ,Будильник...
它有点“模拟”,但由于Android为我们建立了墙,我们试图跳过它们。我无法理解为什么Android限制了我们这么多。获得接收事件警报的许可将是美好的。即使这是一个“危险”的许可。