setLatestEventInfo cannot be resolved

2020-04-07 07:30发布

问题:

I am trying to do a notification on api level 10 and below is my code but im getting a syntax error setLatestEventInfo cannot be resolved. I am guessing its something to do with the API level

 public static void sendNotification(Context caller, Class<?> activityToLaunch, String title, String msg, int numberOfEvents, boolean sound, boolean flashLed, boolean vibrate, int iconID) {
    NotificationManager notifier = (NotificationManager) caller.getSystemService(Context.NOTIFICATION_SERVICE);

    final Notification notify = new Notification(iconID, "", System.currentTimeMillis());

    notify.icon = iconID;
    notify.tickerText = title;
    notify.when = System.currentTimeMillis();
    notify.number = numberOfEvents;
    notify.flags |= Notification.FLAG_AUTO_CANCEL;
    if (sound) notify.defaults |= Notification.DEFAULT_SOUND;

    if (flashLed) {
        // add lights
        notify.flags |= Notification.FLAG_SHOW_LIGHTS;
        notify.ledARGB = Color.BLUE;
        notify.ledOnMS = 500;
        notify.ledOffMS = 500;
    }

    if (vibrate) {
        notify.vibrate = new long[]{100, 200, 300};
    }

    Intent toLaunch = new Intent(caller, activityToLaunch);
    toLaunch.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    toLaunch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent intentBack = PendingIntent.getActivity(caller, notify.number, toLaunch, 0);
    notify.setLatestEventInfo(caller, title, msg, intentBack);
    notifier.notify(notify.number, notify);
    notify.number = notify.number + 1;
}

回答1:

If your compile SDK version is set to api 23+ you'll see this issue. This method was removed in M (api 23).

To do notifications for api 4 onwards you can use the NotificationCompat.Builder which was added in the Android Support Library. The Android Documentation has a decent example:

 Notification noti = new Notification.Builder(mContext)
         .setContentTitle("New mail from " + sender.toString())
         .setContentText(subject)
         .setSmallIcon(R.drawable.new_mail)
         .setLargeIcon(aBitmap)
         .build();

You can replace "Notification.Builder" for "NotificationCompat" if need to support older api versions.