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