J'utilise alarmManager pour lancer le service toutes les heures que le service crée une notification, mais le résultat est que je reçois plus d'une notification en une heure, le service lance-t-il la méthode onStartCommand() ou que se passe-t-il exactement?Utiliser AlarmManger pour démarrer le service
AlarmManager:
cal = Calendar.getInstance();
triggerAtTime = cal.getTimeInMillis()+ (1 * 30 * 60 * 1000); // starts in 30 minutes
repeat_alarm_every = (1 * 60 * 60 * 1000); // repeat every 2 hour
int _id = (int) System.currentTimeMillis();
Intent intent = new Intent(Alarm.this, NotificaSpeed.class);
pintent = PendingIntent.getService(Alarm.this, _id, intent, 0);
alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime, repeat_alarm_every, pintent);
service:
public class NotificaSpeed extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
mNotificationManager = (NotificationManager) getSystemService(ns);
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new VerifySpeedCar().execute();
return super.onStartCommand(intent, flags, startId);
}
public void notification(int carsNumber, int speed){
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(NotificaSpeed.this);
if(carsNumber != 0)
notificationBuilder.setContentTitle(carsNumber+" cars are exceeding the speed");
.setSmallIcon(R.drawable.ic_launcher)
.setAutoCancel(true);
final int _idI = (int) System.currentTimeMillis();
Intent notificationIntent = new Intent(NotificaSpeed.this, ListCars.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, _idI, notificationIntent, 0);
notificationBuilder.setContentIntent(contentIntent);
notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
mNotificationManager.notify(SIMPLE_NOTIFICATION_ID, notificationBuilder.build());
}
class VerifySpeedCar extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(TAG_ACCOUNTID, accountID));
params.add(new BasicNameValuePair(TAG_SPEEDKPH, ""+speedpref)); // how can I get the value of edittext of the speed from the sharedpreferences?
JSONObject json = jParser.makeHttpRequest(url, "GET", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
cars = json.getJSONArray(TAG_CARS);
carsNumber = cars.length();
} else
carsNumber = 0;
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
protected void onPostExecute(String file_url) {
if(carsNumber != 0){
notification(carsNumber, speedpref);
}
}}}
poster votre code ... – SMR
@SMR Je l'ai déjà fait mais pas ansewrs http://stackoverflow.com/questions/23539400/use-alarmmanager-and-service-to-get-data-from-server-repeatedly – Abdel
il suffit de poster votre code uniquement lié à Alarm Manager et service ici. – SMR