ACTION_TIME_TICK未在AppWidgetProvider中捕获广播

时间:2016-02-17 13:26:59

标签: android widget broadcastreceiver broadcast

起初我认为它会按原样运作,因为它会扩展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)
    }

}

1 个答案:

答案 0 :(得分:1)

您的代码应该崩溃,因为您无法通过BroadcastReceiverContext提供的BroadcastReceiver注册onReceive()AppWidgetProviderBroadcastReceiver的子类;类似onUpdate()的方法是从onReceive()方法调用的。

即使这种方式不再像过去那样崩溃,它也无法可靠地运行。在onUpdate()返回后,您的流程可以在几毫秒内终止。

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