0

是否可以创建一个在闹钟响起时触发的 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。当闹钟响起时,有没有办法处理某些任务?例如,当用户早上醒来时,我想显示一条“早上好消息”。

4

2 回答 2

0

是否可以创建一个在闹钟响起时触发的 JobService?

不,对不起。

但它不再适用于 Android 8 Oreo。

您正在处理来自大约 20 个闹钟应用程序的闹钟广播,这只是正在使用的闹钟应用程序的一小部分。当闹钟响起时,第三方闹钟应用程序无需通知其他应用程序。

于 2018-04-02T23:28:49.837 回答
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!!!!
        }
    }
}
  1. 我检查发布的通知是否属于标准的 Android 闹钟应用程序 (com.google.android.deskclock)。

  2. 然后,我需要将显示警报设置为特定时间的常规通知与真正的警报响起通知区分开来。

  3. 看了几个例子后发现,当闹钟响起时,Notification.EXTRA_TITLE 字段中有“Alarm”字样。您需要注意,因为在其他情况下,此字段可能为空或包含文本“待定警报”。但是,当它熄灭时,它只是“警报”。

  4. 我还将设备的语言更改为主要语言(英语,西班牙语,中文,法语,德语,俄语...),并看到它可以更改为 Alarma, Alarme, Wecker, Ébresztő, المنبه, Будильник...

这有点“模拟”,但由于 Android 一直在为我们建造墙壁,我们试图跳过它们。我无法理解为什么 Android 会限制我们这么多。如果有权限接收警报响起事件,那就太好了。即使这是一个“危险”的许可。

于 2018-04-04T12:26:41.237 回答