Android中setLatestEventInfo方法无法解析,该如何替换?
解决Notification.setLatestEventInfo()无法解析的问题
老哥,Notification.setLatestEventInfo()这个方法早就在Android 3.0(API Level 11)的时候被废弃了,现在新版本的SDK里已经完全移除了它,所以你才会碰到无法解析的报错。现在构建通知的标准做法是用NotificationCompat.Builder——它来自AndroidX或者老的support库,能完美兼容从低到高各个版本的Android系统。
我帮你把代码改好了,顺便还修正了原代码里的一个小坑:你原来连续给notifyDetails.flags赋值,把FLAG_AUTO_CANCEL给覆盖成DEFAULT_SOUND了,这俩一个是通知的行为标记,一个是提示音设置,不能混在flags里。
修改后的完整代码如下:
if (messages.length > -1) { Log.i(TAG, "Message recieved: " + messages[0].getMessageBody()); mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); // 用NotificationCompat.Builder构建通知,兼容所有Android版本 NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_launcher) // 必须设置通知小图标,否则通知不显示 .setContentTitle(str) // 对应原setLatestEventInfo的标题参数 .setContentText("") // 对应原setLatestEventInfo的内容参数 .setWhen(System.currentTimeMillis()) // 设置通知触发时间 .setAutoCancel(true) // 替代原FLAG_AUTO_CANCEL,点击通知后自动取消 .setDefaults(Notification.DEFAULT_SOUND) // 设置默认提示音,单独放在defaults里 .setContentIntent(myIntent); // 设置点击通知跳转的PendingIntent // 构建最终的Notification对象 Notification notifyDetails = builder.build(); mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails); Toast.makeText(context, "el rsala " + str, Toast.LENGTH_SHORT).show(); } Intent i = new Intent(context, EncryptionActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra("Encrypt", str); context.startActivity(i);
几个关键的变化点给你提一下:
- 彻底抛弃了
new Notification()的旧初始化方式,改用Builder模式一步步构建通知 - 用
setContentTitle()、setContentText()、setContentIntent()替代了原来的setLatestEventInfo() - 把
FLAG_AUTO_CANCEL换成了setAutoCancel(true),把提示音设置移到了setDefaults()里,避免属性覆盖 - 最后用
builder.build()生成可用的Notification对象
另外要注意,确保你的项目已经引入了AndroidX的core库(如果用AndroidX的话),或者老的support-v4库,这样才能正常使用NotificationCompat类。
内容的提问来源于stack exchange,提问作者obada
相关产品推荐
相关产品推荐

