代码之家  ›  专栏  ›  技术社区  ›  Ton

是否可以创建一个在alarmclock关闭时启动的JobService

  •  0
  • Ton  · 技术社区  · 6 年前

    是否可以创建一个在alarmclock关闭时启动的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中不再起作用。 当警报响起时,有没有办法处理一些任务?例如,当用户早上醒来时,我想显示一条“早上好”消息。

    2 回复  |  直到 6 年前
        1
  •  0
  •   CommonsWare    6 年前

    是否可以创建一个在alarmclock关闭时启动的JobService?

    不,对不起。

    但它在Android 8 Oreo中不再起作用。

    您正在处理约20个闹钟应用程序的闹钟广播,这在使用的闹钟应用程序中只占一小部分。没有要求第三方闹钟应用程序在闹钟响起时通知其他应用程序。

        2
  •  0
  •   Ton    6 年前

    为了解决这个问题,我需要创建一个有点复杂的变通方法。但这是可行的。让我解释一下我做了什么。

    我首先创建 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. 看了几个例子后,我发现当警报响起时,通知中有“alarm”一词。EXTRA\u标题字段。 您需要注意,因为在其他情况下,此字段可能为空或包含文本“待定报警”。但是,当它熄灭时,它只是“警报”。

    4. 我还将设备的语言更改为主要语言(英语、西班牙语、汉语、法语、德语、俄语…)并查看它可以更改为Alarma、Alarme、Wecker、breszt、§¨、。。。

    这有点“模拟”,但由于Android一直在为我们筑墙,我们试图跳过它们。我不明白为什么安卓系统对我们的限制如此之大。如果有权接收警报响起的事件,那就太好了。即使这是一个“危险”的许可。

    推荐文章