2017-04-21 3 views
0

Ich versuche App zu tun, die Benutzer Everymorning mit Push-Benachrichtigung erinnern.Android App, die Benutzer jeden Morgen erinnert

Ich habe AlarmManager, BroadcastReceiver und IntentService verwendet.

Im folgenden Code teste ich meinen AlarmManager mit 60 Sekunden Intervall.

Problem: Alles funktioniert gut, bis ich meine App heruntergefahren, Alarme nicht mehr feuern.

Irgendwelche Ideen wohin als nächstes gehen?

Manifest:

<service 
    android:name=".IntentMentor" 
    android:exported="false" > 
</service> 

<receiver android:name=".AlertReceiver" 
    android:process=":remote"> 
</receiver> 

MainActivity:

Intent intent = new Intent(getApplicationContext(), AlertReceiver.class); 

final PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, 
    intent, PendingIntent.FLAG_UPDATE_CURRENT); 

long firstMillis = System.currentTimeMillis(); 
AlarmManager alarm = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
// 1s is only for testing 
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, 1000*60, pIntent); 

Empfänger:

public class AlertReceiver extends BroadcastReceiver { 

    private static final String TAG = "MyReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "MyReceiver on receive"); 
     Intent i = new Intent(context, IntentMentor.class); 
     context.startService(i); 
    } 
} 

IntentService:

public class IntentMentor extends IntentService { 

    NotificationManager notificationManager; 
    int notifID = 33; 

    private static final String TAG = "MonitorService"; 

    public IntentMentor() { 
     super(TAG); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Log.d("TAG", "Service method was fired."); 
     pushNotification(); 
    } 

    public void pushNotification(){ 
     NotificationCompat.Builder notificBuilder = new NotificationCompat.Builder(this); 
     notificBuilder.setContentTitle("test"); 
     notificBuilder.setContentText("this is text"); 
     notificBuilder.setTicker("this is Ticker?"); 
     notificBuilder.setSmallIcon(R.drawable.ic_info_black_24dp); 
     notificBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND); 

     Intent intent = new Intent(this, Card.class); 

     TaskStackBuilder tStackBuilder = TaskStackBuilder.create(this); 
     tStackBuilder.addParentStack(Card.class); 
     tStackBuilder.addNextIntent(intent); 

     PendingIntent pendingIntent = tStackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 

     notificBuilder.setContentIntent(pendingIntent); 

     notificationManager = (NotificationManager) getSystemService((Context.NOTIFICATION_SERVICE)); 
     notificationManager.notify(notifID, notificBuilder.build()); 
    } 
} 
+0

[Versuchen Sie, dies kann Ihnen helfen] (http://stackoverflow.com/questions/35121191/i-want-show-notification-at-800-am-everyday/35127736#35127736) –

+0

Ich habe versucht, Lösung hinter deinem Link. Danke .. aber ich habe immer noch dasselbe Problem. Wenn die App nicht geöffnet ist, werden keine Alarme ausgelöst. – Wiltson

+0

Stellen Sie sicher, dass Sie die Erlaubnis für WAKE_LOCK geben –

Antwort

0

Versuchen Sie dies Ich aktualisiere Ihren Hauptaktivitätscode. Jetzt versuchen Sie das. Es funktioniert gut für mich.

Intent intent = new Intent(getApplicationContext(), AlertReceiver.class); 

final PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, 
     intent, PendingIntent.FLAG_UPDATE_CURRENT); 

long firstMillis = System.currentTimeMillis(); 
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 

if (android.os.Build.VERSION.SDK_INT >= 23) 
{ 
    alarm.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      firstMillis, 1000*60, pIntent); 
} 
else if (android.os.Build.VERSION.SDK_INT >= 19 
     && android.os.Build.VERSION.SDK_INT < 23) 
{ 
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
      firstMillis, 1000*60, pIntent); 
} 
else 
{ 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, 
      firstMillis, 1000*60, pIntent); 
} 
+0

Funktioniert der Alarmmanager, wenn die App geschlossen ist? – Dejvid

+0

Ja, das funktioniert für mich. –

+0

Aus irgendeinem Grund Alarm.setAndAllowWhileIdle (AlarmManager.ELAPSED_REALTIME_WAKEUP, firstMillis, 1000 * 60, pIntent); wird bei mir nicht funktionieren. setAndAllowWhileIdle braucht nur 3 params? Ich bin ich nur so verloren ... – Wiltson

0

Endlich. Nach zehn Stunden testen, scheitern, testen, scheitern .. Ich habe die Antwort beantwortet.

Protected Apps in Huawei Phones

So wie Sie sehen, war Problem mit meinem Huawei P8 Telefon. Die App muss in der Liste der geschützten Apps enthalten sein. Nun, zumindest einige der getesteten Lösungen funktionieren gut.

Danke für alle zu helfen. Ich denke Andy und andere Lösungen funktionieren gut. Aber Huawei Handys haben dieses spezielle Problem.

Verwandte Themen