当应用程序在后台使用Android Oreo时,我无法获得声音或振动。在前景中应用声音和振动工作正常。
对于以前版本的 android 并且没有 Nofication Channel,一切正常,但现在我找不到这样做的方法。
这是我的代码:
private void showNotification(String title, String body) {
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
String NOTIFICATION_CHANNEL_ID = "com.example.name.notification.test";
Uri sound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/" + R.raw.my_sound);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Notification", NotificationManager.IMPORTANCE_MAX);
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.build();
notificationChannel.setDescription("EDMT Channel");
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.BLUE);
notificationChannel.enableVibration(true);
notificationChannel.setVibrationPattern(new long[]{0,1000,500,1000});
notificationChannel.setSound(sound, audioAttributes); // This is IMPORTANT
notificationManager.createNotificationChannel(notificationChannel);
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder( this,NOTIFICATION_CHANNEL_ID);
notificationBuilder.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(body)
.setContentInfo("Info");
notificationManager.notify(new Random().nextInt(),notificationBuilder.build());
}
我在文档中找到了这个。也许它会帮助你:
-
在 Android 8.0(API 级别 26(及更高版本上,通知的重要性 取决于通知所具有的渠道的重要性 发布到。用户可以更改通知通道的重要性 在系统设置中(图12(。在安卓 7.1(API 级别 25(和 下面,每个通知的重要性由 通知的优先级。
-
安卓O引入通知通道,提供统一系统 以帮助用户管理通知。当您定位 Android O 时,您 必须实现一个或多个要显示的通知通道 向用户发送通知。如果您不定位到 Android O,您的应用将 在Android O上运行时的行为与在Android 7.0上的行为相同 设备。
1.现在必须将单个通知放在特定通道中。
2. 用户现在可以关闭每个频道的通知,而不是打开 关闭来自应用的所有通知。
3. 具有活动通知的应用程序在顶部显示通知"徽章" 主/启动器屏幕上的应用程序图标。
4. 用户现在可以从抽屉中暂停通知。您可以设置一个 通知自动超时。
5. 部分关于通知行为的 API 已从 通知通道。例如,使用 NotificationChannel.setImportant(( 而不是 适用于 Android 8.0 及更高版本的 NotificationCompat.Builder.setPriority((。