如何创建支持较旧API级别的Android通知(例如,lvl 23)

时间:2017-12-05 12:57:13

标签: android api notifications backwards-compatibility

也许这个问题比我预期的要简单:我希望显示notification,在onCreate的{​​{1}}函数内创建(出于调试原因)。< / p>

Activity,Api lvl 23(支持旧设备)并在具有Api lvl 27的Nexus5设备上运行。

显示通知的代码:

Android Studio 3.0.1

这表明不推荐使用仅包含上下文的 PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); Notification notification = new NotificationCompat.Builder(this) .setTicker("SomethingTicker") .setSmallIcon(R.drawable.someImage) .setContentTitle("SomeTitle") .setContentText("SomeText") .setContentIntent(pi) .build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(001, notification); 。我应该在较新版本中使用通知频道。

问题:要创建并注册NotificationChannel,我必须使用api lvl&gt; 27。

我错过了什么?什么是最好的方式

1 个答案:

答案 0 :(得分:3)

  

我想显示在Activity的onCreate函数中创建的通知。

请注意,这是显示Notification的奇怪时间。

  

我错过了什么?

您需要使用代码创建仅在Android 8.0+设备上运行的NotificationChannel

NotificationManager mgr=
  (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O &&
  mgr.getNotificationChannel(CHANNEL_WHATEVER)==null) {
  mgr.createNotificationChannel(new NotificationChannel(CHANNEL_WHATEVER,
    "Whatever", NotificationManager.IMPORTANCE_DEFAULT));
}

然后,对于所有API级别,将您的频道标识符(此处为CHANNEL_WHATEVER)传递给NotificationCompat.Builder构造函数。在旧设备上,频道将被忽略。