I have:
MyApp extends the application with onCreate:
sendBroadcast(refreshAlarm); Log.d(TAG, "broadcast sent with intent " + refreshAlarm); Log.d(TAG, "onCreate");
Where
static final Intent refreshAlarm = new Intent(ACTION_REFRESH_RECEIVER); public static final String ACTION_REFRESH_RECEIVER = "com.example.myapp.REFRESH_RECEIVER";
BroadcastReceiver:
package com.example.myapp; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.preference.PreferenceManager; import android.util.Log; public class RefreshReceiver extends BroadcastReceiver { private static final String TAG = "RefreshReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "broadcast received with intent " + intent); long interval = Long .parseLong(PreferenceManager.getDefaultSharedPreferences( context).getString("delay", "900")) * 1000; PendingIntent operation = PendingIntent.getService(context, -1, new Intent(context, RefreshService.class), PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarmManager = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(operation); if (interval > 0) { alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, operation); } Log.d(TAG, "onReceive: delay = " + interval); } }
declared in expression:
<receiver android:name="com.example.myapp.RefreshReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="com.example.myapp.REFRESH_RECEIVER" /> </intent-filter> </receiver>
It seems to me that I have everything I need to do this job. The broadcast is sent to onCreate (I see that the log really is sent). Broadcast is declared with an intent filter to get refreshAlarm intent, but it does not receive it, and I cannot understand why. Do I need anything else?
source share