2016-07-05 50 views
2

我正在代碼名爲1中開發應用程序。我試圖從應用程序發送用戶本地通知。當用戶打開應用程序時,我已按照以下方式安排LocalNotificationandroid api中的Codenameone LocalNotification <16以及從最近刪除應用程序時

@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); 
    } 

這是我的localNotificationReceived

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

的問題是:

  1. 通知給出了錯誤的Android API級別< 16.我認爲這個問題是不是正在使用的支持庫。如何使用支持庫?

  2. 在api級別16及以上版本中,顯示通知但點擊通知後,localNotificationReceived中的對話框未顯示。

  3. 當應用程序從最近刪除時,應用程序不顯示任何通知和崩潰。

你能提供這方面的見解嗎?

+1

你定義任何構建提示嗎?通常支持應該隱含在版本中 –

+0

不,我不知道這一點。我現在就開始工作。 問題2和3的情況。localNotificationReceived中的代碼未被調用。如果應用程序從最近的應用程序中刪除,該應用程序崩潰沒有任何通知。 – umuieme

+0

我對這件事並不十分了解,我已經讓@ chen-fishbein去看看 –

回答

0

嘗試此代碼爲背景和前景本地通知。

if (isAppInForeground()) { 
} 

通知

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); 

檢查應用程序在背景或下面的方法使用前景。

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; 
} 

背景代碼

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; 
} 

乾杯!!

+0

抱歉誤會,但它的codenameone不是來自原生android。我會提到它的問題。對不起,麻煩了。 – umuieme

1

則很可能codenameone活動尚未開始,並試圖通過顯示你是失敗的對話框,儘量只存儲到存儲和應用程序開始檢查存儲

相關問題