Android 启动系统后更新小部件

Android 启动系统后更新小部件,android,broadcastreceiver,android-widget,boot,Android,Broadcastreceiver,Android Widget,Boot,我的小部件在系统启动30秒后更新。 我为catch intent“android.intent.action.BOOT_COMPLETED”创建了广播接收器,但它没有得到任何反应。Bbroadcast reciver已从我更新我的小部件开始在服务中注册 服务: public class UpdateService extends Service implements UpdateWithScreenResume { private final String TAG = "Upd

我的小部件在系统启动30秒后更新。 我为catch intent“android.intent.action.BOOT_COMPLETED”创建了广播接收器,但它没有得到任何反应。Bbroadcast reciver已从我更新我的小部件开始在服务中注册

服务:

public class UpdateService extends Service implements UpdateWithScreenResume {
    private final String TAG = "UpdateService";

    private CatchScreeOffOnBootReceiver catchScreeOffOnBootReceiver;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {

        catchScreeOffOnBootReceiver = new CatchScreeOffOnBootReceiver();
        catchScreeOffOnBootReceiver.setUpdateWithScreenResume(this); // interface for reaction on boot

        IntentFilter screenIntentFilter = new IntentFilter();

        screenIntentFilter.addAction("android.intent.action.BOOT_COMPLETED");

        registerReceiver(catchScreeOffOnBootReceiver, screenIntentFilter);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_REDELIVER_INTENT;
    }


    private void sendIntentToUpdateWidget() {
      // send Pending Intent to update widget
    }

    @Override // impl interface UpdateWithScreenResume
    public void screenOFF() {
        unregisterReceiver(catchTickIntentReceiver);
    }

    @Override // impl interface UpdateWithScreenResume
    public void screenON() {
        sendIntentToUpdateWidget();
        registerReceiver(catchTickIntentReceiver, new IntentFilter("android.intent.action.TIME_TICK"));
    }

    @Override
    public void onDestroy() {

        unregisterReceiver(catchScreeOffOnBootReceiver);
        super.onDestroy();
    }}
和船广播接收器:

public class CatchScreeOffOnBootReceiver extends BroadcastReceiver {
    private final String TAG = "CatchScreeOffOnBoot";
    private final String SCREEN_ON = "android.intent.action.SCREEN_ON";
    private final String SCREEN_OFF = "android.intent.action.SCREEN_OFF";
    private final String SCREEN_BOOT = "android.intent.action.BOOT_COMPLETED";

    private UpdateWithScreenResume updateWithScreenResume;

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "onReceive: " + intent.getAction());

        switch (intent.getAction()) {
            case SCREEN_ON:
            case SCREEN_BOOT:
                Toast.makeText(context, TAG, Toast.LENGTH_LONG).show();
                updateWithScreenResume.screenON();
                break;
            case SCREEN_OFF:
                updateWithScreenResume.screenOFF();
                break;
        }
    }

    public void setUpdateWithScreenResume(UpdateWithScreenResume updateWithScreenResume) {
        this.updateWithScreenResume = updateWithScreenResume;
    }
}
广播接收器对action.ScreenOn和action.ScreenOff有显著反应,但对action.ScreenOn和action.ScreenOff没有反应