2016-07-05 11 views
2

entfernt wird Ich entwickle eine App in Codename eins. Ich versuche, Benutzer lokale Benachrichtigung von App zu senden. Wenn der Benutzer die App öffnet, habe ich die LocalNotification wie folgt geplant.Codenameone LocalNotification in Android API <16 und wenn die App aus den letzten

@Override 
protected void beforeMain(Form f) { 
    Display.getInstance().cancelLocalNotification(notificationId); 
    LocalNotification notification = new LocalNotification(); 
    notification.setId(notificationId); 
    notification.setAlertTitle("Haven't seen you in long time"); 
    notification.setAlertBody("You have not visited us in long time. You are missing lots of good stuff"); 
    Date date = new Date(); 
    Display.getInstance().scheduleLocalNotification(notification, date.getTime()+threeMinute, LocalNotification.REPEAT_NONE); 
    } 

Das ist mein localNotificationReceived.

@Override 
public void localNotificationReceived(String notificationId) { 
    Dialog.show("Welcome Back", "Have wonderful time ahead", "Ok", null); 
    f.revalidate(); 
} 

Das Problem ist:

  1. Die Meldung gibt Fehler in Android api Ebene < 16. Ich denke, das Problem ist, dass die Support-Bibliothek nicht verwendet wird. Wie benutze ich die Support-Bibliothek?

  2. In API-Ebene 16 und höher wird die Benachrichtigung angezeigt, aber beim Klicken auf die Benachrichtigung wird der Dialog in localNotificationReceived nicht angezeigt.

  3. Wenn die App aus den letzten entfernt wird, zeigt die App keine Benachrichtigung und stürzt ab.

Können Sie einen Einblick darauf geben?

+1

Sie irgendwelche Hinweise bauen definieren Haben? Normalerweise sollte die Unterstützung implizit im Build enthalten sein. –

+0

Nein, das wusste ich nicht. Ich werde jetzt daran arbeiten. Was ist mit Problem 2 und 3. Der Code in localNotificationReceived wird nicht aufgerufen. Und wenn die App aus den letzten Apps entfernt wird, stürzt die App ohne Benachrichtigung ab. – umuieme

+0

Ich weiß nicht wirklich genug darüber, ich habe @ chen-fishbein gebeten, einen Blick zu werfen –

Antwort

0

Probieren Sie diesen Code für lokale Hintergrund- und Vordergrundbenachrichtigungen aus.

if (isAppInForeground()) { 
} 

Mitteilung

NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 

     PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
       this); 
     Notification notification = mBuilder.setSmallIcon(getNotificationIcon()).setTicker(this.getResources().getString(R.string.app_name)).setWhen(0) 
       .setAutoCancel(true) 
       .setContentTitle(regionList.getTitle() + geofenceId) 
       .setStyle(new NotificationCompat.BigTextStyle().bigText(regionList.getEntertext())) 
       .setContentIntent(pendingNotificationIntent) 
       .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
       .setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher)) 
       .setContentText(regionList.getEntertext()).build(); 

     notificationManager.notify(Integer.parseInt(geofenceId), notification); 

Check App ist im Hintergrund oder Vordergrund Verwendung unten Methoden.

private boolean isAppInForeground() { 

    ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> l = mActivityManager 
      .getRunningAppProcesses(); 
    Iterator<ActivityManager.RunningAppProcessInfo> i = l.iterator(); 
    while (i.hasNext()) { 
     ActivityManager.RunningAppProcessInfo info = i.next(); 
     if (info.uid == getApplicationInfo().uid 
       && info.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
      return true; 
     } 
    } 
    return false; 
} 

Background Code

private boolean isAppInBackground() { 

    ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    List<ActivityManager.RunningAppProcessInfo> l = mActivityManager 
      .getRunningAppProcesses(); 
    Iterator<ActivityManager.RunningAppProcessInfo> i = l.iterator(); 
    while (i.hasNext()) { 
     ActivityManager.RunningAppProcessInfo info = i.next(); 
     if (info.uid == getApplicationInfo().uid 
       && info.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) { 
      return true; 
     } 
    } 
    return false; 
} 

Prost !!

+0

Entschuldigung für Missverständnis, aber es in Codenameone nicht von nativen Android. Ich werde es in Frage stellen. Sorry für Ärger. – umuieme

1

es wird wahrscheinlich die codenameone Aktivität noch nicht gestartet wird, und indem man versucht, einen Dialog Sie scheitern angezeigt werden, versuchen Sie, nur auf die Speicher zu speichern und auf die App starten überprüfen Sie die Speicher