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