Я пытаюсь создать сервис, который работает в фоновом режиме, проверяет информацию и выдает уведомления при необходимости. Я попробовал несколько примеров в Интернете, которые в основном совпадают, но я не заставляю их работать.
У меня есть служба и BroadcastReceiver. Когда я запускаю приложение, сервис создается и время регистрируется на каждом тике. Итак, это работает отлично. В onDestroy я настроил новое намерение, которое я отправляю с помощью «sendBroadcast (...)». BroadcastReceiver-класс имеет переопределение onReceive, которое должно регистрировать простой текст. Но я никогда не вижу текст.
Услуга
public class ServiceNoDelay extends Service {
public int counter = 0;
Context context;
public ServiceNoDelay(Context applicationContext) {
super();
context = applicationContext;
Log.i("HERE", "here service created!");
}
public ServiceNoDelay() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
startTimer();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("EXIT", "ondestroy!");
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("com.custom.package.RestartSensor");
sendBroadcast(broadcastIntent);
stoptimertask();
Log.i("EXIT", "Broadcast send!");
}
private Timer timer;
private TimerTask timerTask;
public void startTimer() {
//set a new Timer
timer = new Timer();
//initialize the TimerTask's job
initializeTimerTask();
//schedule the timer, to wake up every 1 second
timer.schedule(timerTask, 1000, 1000); //
}
public void initializeTimerTask() {
timerTask = new TimerTask() {
public void run() {
Log.i("in timer", "in timer ++++ " + (counter++));
}
};
}
public void stoptimertask() {
//stop the timer, if it's not already null
if (timer != null) {
timer.cancel();
timer = null;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
BroadcastReceiver
public class SensorRestarterBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(SensorRestarterBroadcastReceiver.class.getSimpleName(), "Service Stops! Oops!!!!");
context.startService(new Intent(context, ServiceNoDelay.class));
}
}
Часть манифеста
<service
android:name=".ServiceNoDelay"
android:enabled="true" />
<receiver
android:name=".SensorRestarterBroadcastReceiver"
android:enabled="true"
android:exported="true"
android:label="RestartServiceWhenStopped">
<intent-filter>
<action android:name="com.custom.package.RestartSensor" />
</intent-filter>
</receiver>
Часть кода, которую я вызываю в MainActivity
ServiceNoDelay mSensorService = new ServiceNoDelay(getApplicationContext());
Intent mServiceIntent = new Intent(getApplicationContext(), mSensorService.getClass());
startService(mServiceIntent);
Я ожидаю, что logcat покажет "Service Stops! Oops !!!!" когда приложение закрывается, я могу снова активировать службу.
Если я ищу неправильный путь для отображения уведомлений после закрытия приложения; Я открыт для предложений.