ACTION_TIME_TICK 广播没有被 AppWidgetProvider 捕获

ACTION_TIME_TICK Broadcast not being caught inside AppWidgetProvider

起初我认为它会因为扩展 BroadcastReciever 而按原样工作,但事实并非如此。

所以 onEnabled 我已将其注册为所需的意图 ACTION_TIME_TICK

然而,从未收到。

我怎样才能正确捕获广播,以便我可以更新小部件的时钟,以及刷新我的小部件上的一些值。在分钟标记处这样做是最理想的时间。

public class Widget extends AppWidgetProvider {
    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        Log.v("WIDGET", "Recieved: " + intent.getAction());
    }

    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
        //Turn off auto update
        context.unregisterReceiver(this);
    }

    @Override 
    public void onEnabled(Context context) {
        super.onEnabled(context);

        context.registerReceiver(this, new IntentFilter(Intent.ACTION_TIME_TICK));
        // Start auto update on Enable (widget exists)
    }

}

您的代码应该会崩溃,因为您无法通过 onReceive() 从提供给 BroadcastReceiverContext 注册 BroadcastReceiverAppWidgetProviderBroadcastReceiver 的子类; onUpdate() 等方法是从其 onReceive() 方法中调用的。

即使这不再像以前那样崩溃,它也不会可靠地工作。您的进程可以在 onUpdate() returns.

后的毫秒内终止

欢迎您将此 Intent 操作添加到您的 <intent-filter> 以供您 Widget 使用。请记住,当您覆盖 onReceive() 时,如果操作不是您自己处理的操作,请链接到超类,因此可以调用 onUpdate() 和 kin。