为啥我在通知中收到弃用警告..?

Posted

技术标签:

【中文标题】为啥我在通知中收到弃用警告..?【英文标题】:why am i getting deprecation warning in notification..?为什么我在通知中收到弃用警告..? 【发布时间】:2013-01-15 05:38:29 【问题描述】:
NotificationManager nm=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Notification n=new Notification(android.R.drawable.stat_notify_more , "My Alarm Ringing", System.currentTimeMillis());
Context cn=MainActivity.this;
CharSequence title="My Alarm Clock";
CharSequence details="Alarm Ringing....!!!";
Intent in=new Intent(cn,Alarm.class);
PendingIntent p=PendingIntent.getActivity(cn, 0, in, 0);
n.setLatestEventInfo(cn,title,details,p);
nm.notify(0,n);

在 ecllipse 中,我在第二行收到通知,最后第二行中的 setLatestEventInfo 被删除。为什么会这样..? 任何人都可以澄清什么是错误..? 谢谢你的帮助

【问题讨论】:

见heresetLatestEventInfo method was deprecated in API level 11. Use Notification.Builder instead @Sud 该构造函数已弃用,请改用Notification.Builder notfication.builder 适用于 API 级别 11 及以上 bt m 在级别 8 及以上开发应用程序,因此我猜在这种情况下它不会工作 您可以尝试将 minSdk 设置为 8。如果这不起作用,请尝试将 targetSdk 设置为 8。如果一切都失败了,Eclipse 允许您微调标记了哪些警告。 【参考方案1】:

Deprecation是

应用于特性、特征或实践的状态,表明它们应该被避免,通常是因为它们已被取代。

警告会提醒您注意目标 SDK 中已弃用的方法,以便您尽量避免使用它。

在这个特定的上下文中,警告建议您改用Notification.Builder,但是如果您的需要不允许您使用Notification.Builder,由于向后兼容或其他原因,您可以(很可能)继续使用setLatestEventInfo 没有问题。看来这只是对 API 的升级,并不是特别需要避免的。

【讨论】:

改用Notification.Builder @dicarlo2 .. 如果他使用的是 minSdk 8 则不可能 .. 他可以将 target sdk 设置为 8 .... 是的,我不喜欢弃用。我的客户群中仍然有很大一部分运行 1.5 和 1.6,所以如果可以避免的话,我绝不会使用任何比 API 3 更新的 API。仅仅因为旧界面已被弃用并不意味着我会在没有充分理由的情况下停止使用它。 @EdwardFalk 确实,我更新了我的帖子,并指出切换到使用非弃用方法并不总是很重要,特别是如果你有充分的理由不这样做。考虑到它似乎只是 API 的升级,我不会担心不切换到Notification.Builder 避免使用已弃用的方法和类的充分理由是它们通常会在之后被删除。例如,在 SDK 版本 23 中已删除 setLatestEventInfo。【参考方案2】:

Notification.setLatestEventInfo() 在 API 11 (source) 中已弃用。正如其他人所提到的,您应该改用 Notification.Builder 。 (source)

如果您使用的是 API 11 之前的 API,您可以使用 Android 提供的兼容性包。使用此库将允许您将 API 11 及更高版本用于运行 API 11 及更低版本的设备。 Android Support Library

另外,您知道,您需要使用 NotificationCompat.Builder(),而不是使用 Notification.Builder()。

【讨论】:

【参考方案3】:

对旧版本使用 NotificationCompat。

private NotificationCompat.Builder buildNormal() 
    NotificationCompat.Builder b = new NotificationCompat.Builder(mContext.getApplicationContext());

    b.setAutoCancel(true)
     .setDefaults(Notification.DEFAULT_ALL)
     .setWhen(System.currentTimeMillis())         
     .setSmallIcon(R.drawable.ic_launcher)
     .setTicker("Optional ticker")            
     .setContentTitle("Default notification")
     .setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
     .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_VIBRATE| Notification.DEFAULT_SOUND)
     .setContentIntent(buildPendingIntent())
     .setContentInfo("Info");


    return b;

【讨论】:

【参考方案4】:

因为在您提到的目标 SDK 中,此方法已被弃用...简单。

最好阅读文档而不是docs

【讨论】:

【参考方案5】:

根据https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-notifications,“此版本删除了 Notification.setLatestEventInfo() 方法。改用 Notification.Builder 类来构造通知。”使用适用于 Android 6.0 的 API 级别 23,当我尝试使用 setLatestEventInfo() 时,我的代码甚至无法编译。我收到以下错误:

Error:(86, 15) error: cannot find symbol method setLatestEventInfo(Context,String,String,PendingIntent)

您说您使用的是 API 级别 17。如果您尝试使用 API 级别 23 编译代码,我只能确认您不能使用 setLatestEventInfo()。

【讨论】:

我在***.com/questions/19474116/… 读到“通知的构造函数自 API 11 起已弃用”。我们现在应该使用它:developer.android.com/reference/android/app/….

以上是关于为啥我在通知中收到弃用警告..?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中,如何删除已弃用的通知变量?

为啥我在 Swift 中没有收到来自 Firebase 的推送通知?

使用 phpunit 9.5 捕获警告、通知和弃用

在 php 8.1.0 上使用 phpunit 9.4 捕获警告、通知和弃用

ITMS-90809:使用 react-native-html-to-pdf 时已弃用 API 使用警告

为啥我的 iPhone 没有收到任何通知?