可以通过manifest接收ACTION_POWER_CONNECTED,但不能通过编程方式接收



为什么我可以通过manifest文件为"android.intent.action.ACTION_POWER_CONNECTED"注册广播接收器,但不能使用以下编程方式:

    IntentFilter iFilter = new IntentFilter();
    iFilter.addAction("android.intent.action.ACTION_POWER_CONNECTED");
    registerReceiver(powerStateListener, iFilter);

确定哪些意图必须通过清单注册,哪些可以通过编程完成的最好方法是什么?

不幸的是,这里的文档有点迟钝。它实际上只记录在ACTION_BATTERY_CHANGED:

您不能通过manifest中声明的组件接收到此信息。只能通过显式地使用Context.registerReceiver()进行注册。参见ACTION_BATTERY_LOW, ACTION_BATTERY_OKAY, ACTION_POWER_CONNECTED,和ACTION_POWER_DISCONNECTED用于不同的电池相关广播可以通过清单接收器接收

因此,根据我对文档的理解,ACTION_BATTERY_CHANGED只能由已注册的接收器接收,而ACTION_POWER_CONNECTED只能由清单中指定的接收器接收。

最新更新