IntentService не начнет использовать AlarmManager
Я знаю, что есть много вопросов об этом, но я действительно не знаю, где моя ошибка.
Моя служба зарегистрирована в файле AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.app" >
...
<service android:name="com.example.android.app.ScheduledService">
</service>
</application>
</manifest>
Моя служба расширяет IntentService
public class ScheduledService extends IntentService {
public ScheduledService() {
super("ScheduledService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d(getClass().getSimpleName(), "I ran!");
}
}
Моя активность запускает сервис
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(getClass().getSimpleName(), "Setting alarm!!");
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this, com.example.android.app.ScheduledService.class);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() +
10 * 1000, pending);
}
}
Я не вижу никаких исключений в журналах. Есть ли что-то еще, что я должен сделать, чтобы настроить будильник?
Ответы
Ответ 1
Как и в документации, PendingIntent.getBroadcast()
используется для извлечения PendingIntent
, который будет выполнять широковещательную передачу, например, вызов Context.sendBroadcast()
.
Вместо этого вам нужно вызвать PendingIntent.getService()
, который запустит IntentService
:
PendingIntent pending = PendingIntent.getService(this, 0, alarmIntent, 0);
Ответ 2
Посмотрите внимательно на API AlarmManager
и PendingIntent
. API AlarmManager.set()
ожидает намерения трансляции, которое вы предоставляете. Однако вы пытаетесь отправить намерение трансляции на службу, что невозможно. Просто создайте BroadcastReceiver
, чтобы поймать Intent
, и ваш БР должен начать свою службу.
Ответ 3
API говорит:
обычно поступает из IntentSender.getBroadcast().
что означает, что PendingIntent.getService
тоже может работать.
Я тестировал его, и он работает.