Android 自动检测系统日期是否已更改

Android 自动检测系统日期是否已更改,android,android-intent,alarmmanager,android-broadcastreceiver,Android,Android Intent,Alarmmanager,Android Broadcastreceiver,每当系统日期更改或用户手动更改系统日期时,我尝试启动倒计时。我使用了广播操作来检测系统日期是否已更改,但不起作用。在这个问题上有很多线索。一些用户说,只有当用户通过设置手动更改日期时,它才起作用,一些用户说,它以两种方式工作,即自动更改日期或用户通过设置手动更改日期。但就我而言,这两种情况都不起作用。一些用户建议使用Alarm Manager来代替此广播操作,即“android.intent.action.DATE_CHANGED” 以下是我对广播的实施: <manifest xm

每当系统日期更改或用户手动更改系统日期时,我尝试启动倒计时。我使用了广播操作来检测系统日期是否已更改,但不起作用。在这个问题上有很多线索。一些用户说,只有当用户通过设置手动更改日期时,它才起作用,一些用户说,它以两种方式工作,即自动更改日期或用户通过设置手动更改日期。但就我而言,这两种情况都不起作用。一些用户建议使用Alarm Manager来代替此广播操作,即“android.intent.action.DATE_CHANGED”

以下是我对广播的实施:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.byteshaft.a1440time">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".receivers.OnDateChangeReceiver"  android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.DATE_CHANGED"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

如果Alarm Manager是唯一的解决方案,那么是否有关于如何以适当方式实施它的指南?

是否仅在设置了设备的时间后才会收到通知

您可以改为收听android.intent.action.TIME\u SET广播。 每次修改系统时间时都会触发


如果您的应用程序的目标是Android 8.0(API级别26)或更高版本,则此广播无法在AndroidManifest.xml中注册,只能通过
上下文注册。registerBroadcastReceiver
要检测日期更改,您必须使用两种意图操作:

    <receiver android:name=".BroadcastReceiverTest">
        <intent-filter>
            <action android:name="android.intent.action.TIME_SET"/>
            <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
        </intent-filter>
    </receiver>

我测试过了,它能工作


在API级别26或更高的目标期间,您不能在清单中的隐式广播中使用“android.intent.action.DATE_CHANGED”。

每当系统日期发生更改时,我都需要得到通知。@Dominik
android.intent.action.TIME_SET
是一个白名单中的意图,并且可以在清单中设置,甚至在API 26中,根据
    <receiver android:name=".BroadcastReceiverTest">
        <intent-filter>
            <action android:name="android.intent.action.TIME_SET"/>
            <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
        </intent-filter>
    </receiver>