Je souhaite appeler un service lorsqu'une certaine activité commence. Alors, voici la classe Service:
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();
}
}
Et voici comment je l'appelle:
Intent serviceIntent = new Intent();
serviceIntent.setAction("cidadaos.cidade.data.UpdaterServiceManager");
startService(serviceIntent);
Le problème est que rien ne se passe. Le bloc de code ci-dessus est appelé à la fin de l'activité onCreate
. J'ai déjà débogué et aucune exception n'est levée.
Une idée?
android
service
android-activity
Miguel Ribeiro
la source
la source
START_STICKY
redémarrer le service, mais alors seul onCreate est appelé et le minuteur var ne sera pas réinitialisé. Vous pouvez jouer avecSTART_REDELIVER_INTENT
, le service d'alarme ou l'API 21 Job Scheduler pour résoudre ce problème.<service android:name="your.package.name.here.ServiceClass" />
de la balise d'application.Réponses:
Vous n'avez probablement pas le service dans votre manifeste, ou il n'en a pas
<intent-filter>
qui correspond à votre action. L'examen de LogCat (viaadb logcat
, DDMS ou la perspective DDMS dans Eclipse) devrait afficher des avertissements qui peuvent aider.Plus probablement, vous devriez démarrer le service via:
la source
Le simple fait d'écrire cette ligne ne me suffisait pas. Le service ne fonctionnait toujours pas. Tout n'avait fonctionné qu'après l'enregistrement du service au manifeste
la source
Code Java pour le service de démarrage :
Démarrer le service à partir de l' activité :
Démarrez le service à partir de Fragment :
MyService.java :
Définissez ce service dans le fichier manifeste du projet:
Ajoutez la balise ci-dessous dans le fichier manifeste :
Terminé
la source
J'aime le rendre plus dynamique
n'oubliez pas le Manifeste
la source
ajouter un service dans le manifist
pour exécuter le service sur oreo et les appareils supérieurs, utiliser pour le service au sol et afficher une notification à l'utilisateur
ou utilisez le service de géorepérage pour la mise à jour de l'emplacement dans la référence en arrière-plan http://stackoverflow.com/questions/tagged/google-play-services
la source