Ich möchte einen Dienst anrufen, wenn eine bestimmte Aktivität beginnt. Hier ist also die Service-Klasse:
public class UpdaterServiceManager extends Service {
private final int UPDATE_INTERVAL = 60 * 1000;
private Timer timer = new Timer();
private static final int NOTIFICATION_EX = 1;
private NotificationManager notificationManager;
public UpdaterServiceManager() {}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// Code to execute when the service is first created
}
@Override
public void onDestroy() {
if (timer != null) {
timer.cancel();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startid) {
notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
int icon = android.R.drawable.stat_notify_sync;
CharSequence tickerText = "Hello";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, Main.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText,
contentIntent);
notificationManager.notify(NOTIFICATION_EX, notification);
Toast.makeText(this, "Started!", Toast.LENGTH_LONG);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Check if there are updates here and notify if true
}
}, 0, UPDATE_INTERVAL);
return START_STICKY;
}
private void stopService() {
if (timer != null) timer.cancel();
}
}
Und so nenne ich es:
Intent serviceIntent = new Intent();
serviceIntent.setAction("cidadaos.cidade.data.UpdaterServiceManager");
startService(serviceIntent);
Das Problem ist, dass nichts passiert. Der obige Codeblock wird am Ende der Aktivität aufgerufen onCreate
. Ich habe bereits debuggt und es wird keine Ausnahme ausgelöst.
Irgendeine Idee?
android
service
android-activity
Miguel Ribeiro
quelle
quelle
START_STICKY
, der Dienst wird neu gestartet, aber dann wird nur onCreate aufgerufen und die Timer-Variable wird nicht neu initialisiert. Sie können mitSTART_REDELIVER_INTENT
dem Alarmdienst oder dem API 21 Job Scheduler spielen, um dies zu beheben.<service android:name="your.package.name.here.ServiceClass" />
des Anwendungs-Tags registriert haben .Antworten:
Wahrscheinlich haben Sie den Dienst nicht in Ihrem Manifest oder es gibt keinen
<intent-filter>
, der Ihrer Aktion entspricht. Wenn Sie LogCat (überadb logcat
, DDMS oder die DDMS-Perspektive in Eclipse) untersuchen, sollten einige Warnungen angezeigt werden, die möglicherweise hilfreich sind.Wahrscheinlicher ist, dass Sie den Dienst über Folgendes starten sollten:
quelle
Nur diese Zeile zu schreiben, hat mir nicht gereicht. Der Service hat immer noch nicht funktioniert. Alles hatte erst nach der Registrierung des Dienstes bei Manifest funktioniert
quelle
Java - Code für Start - Service :
Starten Sie den Dienst ab Aktivität :
Starten Sie den Dienst von Fragment :
MyService.java :
Definieren Sie diesen Service in der Manifestdatei des Projekts:
Fügen Sie das folgende Tag in die Manifest- Datei ein:
Getan
quelle
Ich mache es gerne dynamischer
Vergiss das Manifest nicht
quelle
Service im Manifist hinzufügen
Zum Ausführen eines Dienstes auf oreo und größeren Geräten verwenden Sie den Bodendienst und zeigen dem Benutzer eine Benachrichtigung an
Oder verwenden Sie den Geofencing-Dienst für die Standortaktualisierung in der Hintergrundreferenz http://stackoverflow.com/questions/tagged/google-play-services
quelle