Commencez par enregistrer un récepteur dans votre fichier manifest.xml :
<receiver android:name="com.mileagelog.service.Broadcast_PowerUp" >
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
et ensuite écrire une diffusion pour ce récepteur comme :
public class Broadcast_PowerUp extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_POWER_CONNECTED)) {
Toast.makeText(context, "Service_PowerUp Started",
Toast.LENGTH_LONG).show();
} else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) {
Toast.makeText(context, "Service_PowerUp Stoped", Toast.LENGTH_LONG)
.show();
}
}
}
25 votes
@user244540 : S'il vous plaît, ne "démarrez pas un service au moment du démarrage" avec l'intention de le faire fonctionner pour toujours, à moins qu'il ne fournisse continuellement de la valeur (par exemple, un client VOIP). Dans ces cas, utilisez
startForeground()
à votre service. Sinon, Android et ses utilisateurs supprimeront votre service comme étant un gaspillage d'espace, et vous recevrez des commentaires désagréables sur l'Android Market. Dans la plupart des cas où vous souhaitez qu'un service démarre au moment du démarrage, il est préférable d'utiliser la commandeAlarmManager
pour que votre service puisse fonctionner périodiquement plutôt que en permanence .2 votes
@CommonsWare : Bon point. Cependant, notez que pour commencer les exécutions périodiques par
AlarmManager
après le redémarrage, vous devez suivre des étapes très similaires (la différence étant dans le contenu du fichieronReceive
méthode)1 votes
@CommonsWare : Très bon commentaire, je suis tombé par hasard sur cette question et votre indice correspond exactement à ma situation. Si c'était une réponse, j'aurais voté pour elle :-)