2016-07-05 3 views
2

から削除されたときに、私はコードネーム1内のアプリを開発しています。私はアプリからユーザーのローカル通知を送信しようとしています。ユーザーがアプリを開くと、私は以下のようにLocalNotificationをスケジュールしています。CodenameoneアンドロイドAPIの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. 通知レベルが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

。私は問題に言及します。ごめんなさい。 – umuieme

1

それはおそらくcodenameone活動はまだ始まって、あなたが失敗しているダイアログを表示しようとすることで、単にストレージに格納しようとアプリにされていないされているストレージ

関連する問題