每当系统日期发生变化或用户手动更改系统日期时,我都会尝试启动倒数计时器。我使用 this 广播操作来检测系统日期是否已更改但是无法正常工作。这个问题有很多线索。有些用户说只有当用户从设置中手动更改日期时才会起作用,而有些用户说它可以同时工作,但日期会自动更改,或者用户手动更改设置。但就我而言,它并不适用于这两种情况。有些用户建议使用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>
我的广播接收器类:
public class OnDateChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_DATE_CHANGED)){
System.out.println("Changed");
}
}
}
如果警报管理器是唯一的解决方案,那么有关于如何以正确方式实现它的指南吗?
答案 0 :(得分:1)
您是否只想在设置时间时收到通知?
您可以通过android.intent.action.TIME_SET
广播收听。
每次修改系统时间时都会触发它。
如果您的应用定位到Android 8.0(API级别26)或更高版本,则此广播无法在AndroidManifest.xml中注册,则只能通过Context.registerBroadcastReceiver
答案 1 :(得分:0)
要检测日期的变化,您必须使用两个意图操作:
<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"
用于清单中的隐式广播。