我在 Android 8.1 API 27上获得了Toast: Developer warning for package “my_package_name” Failed to post notification on … Logcat包含下一个字符串: Notification: Use of stream types is deprecated for operations other than
Developer warning for package “my_package_name”
Failed to post notification on …
Logcat包含下一个字符串:
Notification: Use of stream types is deprecated for operations other
than volume controlW/Notification: See the documentation of setSound() for what to use
instead with android.media.AudioAttributes to qualify your playback
use caseE/NotificationService: No Channel found for pkg=my_package_name
Toast和Logcat中的完整信息可以帮助解决此问题.
如果你得到这个错误应该注意2项并且他们订购:> NotificationChannel mChannel = new NotificationChannel(id,name,importance);
> builder = new NotificationCompat.Builder(context,id);
NotificationManager notifManager和NotificationChannel mChannel也只创建一次.
通知需要设置者:
> builder.setContentTitle()//必需
> .setSmallIcon()//必需
> .setContentText()//必需
见例子:
private NotificationManager notifManager; public void createNotification(String aMessage, Context context) { final int NOTIFY_ID = 0; // ID of notification String id = context.getString(R.string.default_notification_channel_id); // default_channel_id String title = context.getString(R.string.default_notification_channel_title); // Default Channel Intent intent; PendingIntent pendingIntent; NotificationCompat.Builder builder; if (notifManager == null) { notifManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int importance = NotificationManager.IMPORTANCE_HIGH; NotificationChannel mChannel = notifManager.getNotificationChannel(id); if (mChannel == null) { mChannel = new NotificationChannel(id, title, importance); mChannel.enableVibration(true); mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); notifManager.createNotificationChannel(mChannel); } builder = new NotificationCompat.Builder(context, id); intent = new Intent(context, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); builder.setContentTitle(aMessage) // required .setSmallIcon(android.R.drawable.ic_popup_reminder) // required .setContentText(context.getString(R.string.app_name)) // required .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true) .setContentIntent(pendingIntent) .setTicker(aMessage) .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); } else { builder = new NotificationCompat.Builder(context, id); intent = new Intent(context, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); builder.setContentTitle(aMessage) // required .setSmallIcon(android.R.drawable.ic_popup_reminder) // required .setContentText(context.getString(R.string.app_name)) // required .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true) .setContentIntent(pendingIntent) .setTicker(aMessage) .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}) .setPriority(Notification.PRIORITY_HIGH); } Notification notification = builder.build(); notifManager.notify(NOTIFY_ID, notification); }