-1

J'essaie de faire en sorte que mon application utilise AlarmManager pour envoyer une notification après 5 secondes, mais le pendingIntent ne semble pas être appelé. Heres mon codePourquoi mon AlarmManager n'attend pas le Pendingintent

En onCreate dans MainActivity:

Long alertTime = new GregorianCalendar().getTimeInMillis()+5*1000; 
    Intent alertIntent = new Intent(this, Notification.class); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime , PendingIntent.getBroadcast(this, 1, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 

Notification.class:

public class Notification extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    PendingIntent notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); 
      mBuilder.setSmallIcon(R.drawable.ic_launcher) 
      .setContentTitle("Title") 
      .setTicker("Ticker") 
      .setContentText("Text"); 
    mBuilder.setContentIntent(notificIntent); 
    mBuilder.setDefaults(NotificationCompat.DEFAULT_VIBRATE); 
    mBuilder.setAutoCancel(true); 
    NotificationManager mNotificationManager = 
      (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(1, mBuilder.build()); 

} 

}

Android Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.wouter.lifetracker" 
android:versionCode="1" 
android:versionName="1.0" android:installLocation="auto"> 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="21" /> 
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver 
     android:name=".Notification" 
     > 
     </receiver> 

</application> 

J'ai cherché pendant des heures, mais je ne peux pas savoir pourquoi rien ne se passe

Répondre

1

Voir: https://developer.android.com/reference/android/app/AlarmManager.html#set(int, long, android.app.PendingIntent)

Note: À partir de 19 API, le temps de déclenchement passé à cette méthode est traité comme inexact: l'alarme ne sera pas livrée avant cette heure, mais peut être différée et livrée plus tard. Le système d'exploitation utilisera cette stratégie afin de «grouper» les alarmes ensemble sur l'ensemble du système , en minimisant le nombre de fois que le périphérique doit «se réveiller» et en minimisant l'utilisation de la batterie. En général, les alarmes programmées dans le proche ne seront pas différées tant que les alarmes programmées loin dans le futur .

1

seulement 5 secondes?

essayez ceci:

new Handler().postDelayed(new Runnable() { 
       public void run() { 
       showNotification(); //your notification code called after 5 seconds 
       } 
      }, 5 * 1000); // 5 seconds... 

OU ESSAYER:

long alertTime = System.currentTimeMillis() + (5 * 1000); // <-- try this 
Intent alertIntent = new Intent(this, Notification.class); 
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime , PendingIntent.getBroadcast(this, 1, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 
+0

Merci pour votre réponse Oui, c'est seulement 5 secondes pour que je puisse facilement vérifier wether cela fonctionne ou non, à la fin il est censé partir une fois par jour. J'ai essayé votre suggestion et cela ne fonctionne toujours pas. Je suis en train de tester cette application sur mon téléphone, alors peut-être que c'est juste un problème avec mon téléphone? – Wolion