Démarrage d'un service sur la plate-forme android
Je suis en train de créer un service à l'aide de startService(Intent intent) méthode. Lorsque j'appelle cette fonction, il atteint la onCreate de service, mais il est impossible d'appeler onStartCommand. Voici mon code--
@Override
public void onReceive(Context context, Intent intent) {
//Send a text notification to the screen.
Log.e("mudit", "Action: " + intent.getAction());
try {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connManager.getActiveNetworkInfo();
Log.e("mudit", "getType: " + info.getType());
Log.e("mudit", "isConnected: " + info.isConnected());
if (info.isConnected()) {
Intent newinIntent = new Intent(context, service.class);
context.startService(newinIntent);
}
} catch (Exception e) {
e.printStackTrace();
Intent newinIntent = new Intent(context, service.class);
context.stopService(newinIntent);
}
}
Code De Service --
package com.android.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class service extends Service {
@Override
public IBinder onBind(Intent arg0) {
//TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this, "Service created...", Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show();
}
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "onStartCommand...", Toast.LENGTH_LONG).show();
return 1;
}
}
Manifest.xml --
<receiver class=".AReceiver" android:name=".AReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<service class=".service" android:name=".service"
android:enabled="true" android:icon="@drawable/icon">
</service>
à des fins de débogage, je préfère utiliser les JOURNAUX plutôt que de porter un TOAST. recevez votre code de travail à travers le processus de prise de décision. Une pièce sonore de conseils de @JPM n'est pas au nom de votre Service "de service". l'appeler "myService" si vous voulez être dans le vague.
OriginalL'auteur mudit | 2010-02-20
Vous devez vous connecter pour publier un commentaire.
larsVogel résout ce problème (et beaucoup d'autres comme lui) dans cet excellent post.
c'est comment j'ai adapté son code pour créer une connectivité récepteur qui surveille lorsque l'utilisateur se connecte à un réseau WIFI afin de lot télécharger des données d'utilisation:
dans le fichier de Manifeste, le lieu d'un récepteur et de déclarer un service juste avant la balise de fin pour votre < /application >:
créer un récepteur de radiodiffusion de classe dans un fichier séparé appelé ConnMonitor.java (décommentez le Journal des appels pour être en mesure de surveiller correctement le flux)
et, enfin, de créer un service BatchUploadGpsData.java comme ceci:
ce n'est pas de pseudo, c'est le code réel, testé et fonctionne sur android 2.2 et plus.
la façon de tester ce service est d'arrêter et de redémarrer votre services WIFI sur votre android (éteindre le routeur wifi feront aussi l'affaire). MAIS ce code ne permet pas de vérifier si vous êtes effectivement connecté au net. pour cela, je vous conseille de vous faire un httpclient demande et de vérifier le résultat de l'appel. au-delà de la portée de cette discussion.
REMARQUE: étant donné que les services s'exécutent sur le même thread que l'UI, je vous recommande fortement de mettre en œuvre le téléchargement sur un thread séparé ou asynctask, en fonction de vos besoins spécifiques. vous pouvez également exécuter l'ensemble du service sur un thread séparé, mais c'est encore une fois pas la portée de cette discussion, en dépit d'être la norme dans ces cas.
OriginalL'auteur tony gil
Source
OriginalL'auteur srinivas Nidadavolu
D'abord, vous devez ajouter
@Override
avantonStartCommand(..)
puis assurez-vous que la cible pour le projet Android est supérieur à 2.0 .OriginalL'auteur Jimmy
Je crois, que vous ne pouvez pas accéder à tous les composants d'INTERFACE utilisateur comme le Dialogue ou même un Toast dans un service.
de l'essayer.
OriginalL'auteur JaydeepW
Tout d'abord le nom de votre classe à quelque chose d'autre est ma recommandation pour éviter la confusion en bas de la ligne. Deuxième voici un exemple de mon manifeste appel d'un service que je n'ai que des œuvres. J'utilise plein de noms de chemin d'accès lors de l'appel de services, car ils ne sont pas dans le même package que mon application.
Ici est le sens de ma classe de service,
Troisième assurez-vous d'utiliser @Override de la onStartCommand().
OriginalL'auteur JPM