0

我做了这个广播接收器Android:android.intent.action.DATE_CHANGED在设备重启时触发?

public class DateReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.i("DATE RECEIVER", "OK"); 
    } 
} 

登记清单

 <receiver 
     android:name=".DateReceiver" 
     android:enabled="true" 
     android:exported="false" > 
     <intent-filter> 
      <action android:name="android.intent.action.DATE_CHANGED" /> 
     </intent-filter> 
    </receiver> 

它的工作原理,当设备处于开启状态,但如果我把它关掉,等待午夜通过的话,我没有得到任何意图重启。我应该如何得到它?

+0

“它在设备开启时有效” - 不,因为[你阻止任何人通过android:exported =“false”发送广播给它](http://developer.android的.com /引导/主题/清单/接收机-element.html#导出)。 – CommonsWare

+0

我看到了它的日志 – user3290180

+0

我打开系统设置并手动更改时间,一秒钟之后调用接收器并打印log.i – user3290180

回答

2

你不会得到这个广播,因为日期没有改变(除非在开机后有更新时间)。这是不同的,但没有改变这种广播的理由。这可能会令人困惑,但事实上,设备启动时的时间戳无关紧要。当设备启动时,它不知道是因为重新启动还是关闭了5周。如果时间被人为改变,即由于网络时间同步,通过偏好进行手动时间改变,时区改变,广播将被发送)。正常滴答不计算。初始时间戳dos无关紧要。

如果您需要了解启动日期,您应该听取BOOT_COMPLETED

您还需要删除android:exported="false"或将其设置为true否则无法访问。

+0

好吧,我要试一试 – user3290180

+0

你的意思是我必须将当前的日子存储在共享的pref中,然后检查系统是否在重新启动时再说一天? – user3290180

+0

我不知道你想要达到什么目的。你为什么关心日期变化的**事实,而不是仅仅获得当前的印记,并在此基础上应用你的逻辑?在后一种情况下,日期改变的原因并不重要 –

相关问题