在我的Android清单中,它说:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="16" />
但是当我编写这段代码时,最后的getNotification会让我警告说该方法已被“弃用”:
Notification myNotification = new Notification.Builder(appContext)
.setContentTitle("SIC")
.setContentText(tickerText)
.setWhen(when)
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true)
.setContentIntent(contentIntent)
.getNotification(); // <-- warning here
现在,问题是对于API级别10,这是我正在开发的最小值,getNotification是唯一可以使用的。名为“build()”的新方法适用于API级别16。
那么,为什么我得到了已弃用的警告,即使它是我唯一能够和应该使用的警告?有人可能认为警告/文档应该适应minSdkLevel,而不是高等级的......
答案 0 :(得分:4)
那么,为什么我得到了被弃用的警告,即使它是唯一可以和应该使用的警告?
因为您的构建目标是API级别16或更高,所以不推荐使用此方法。
有人可能会认为警告/文档应该适应minSdkLevel,而不是高等级的
在这种情况下,一个是不正确的。弃用与minSdkVersion
无关,比在Android之外的标准Java中有所不同(存在弃用且minSdkVersion
不存在)。
此外,您应该使用Android Support软件包的Notification.Builder
版本(称为NotificationCompat.Builder
,因为API级别10中不存在本机版本,您的清单表明您正在尝试支持。build()
应存在于NotificationCompat.Builder
上,并处理您所需的所有API级别。
答案 1 :(得分:3)
如果你想以“技术上正确”的方式做到这一点,你会做类似
的事情Notification bldr = new Notification.Builder(appContext)
.setContentTitle("SIC")
.setContentText(tickerText)
.setWhen(when)
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true)
.setContentIntent(contentIntent);
Notification notif;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
notif = bldr.getNotification()
} else {
notif = bldr.build();
}
然后使用TargetApi(16)
注释该方法。这就是你通常如何处理这些类型的问题。
在您的情况下,您应该在兼容包中使用NotificationCompat.Builder
。
答案 2 :(得分:3)
这是一个如何使用 NotificationCompat 类创建通知的示例,所有API都支持
public static void createNotificacion(Context ctx) {
try {
int smallIcon = R.drawable.ic_launcher;
Bitmap largeIcon = BitmapFactory.decodeResource(ctx.getResources(),R.drawable.ic_launcher);
long when = System.currentTimeMillis();
CharSequence contentTitle = "Jorgesys";
CharSequence contentText = "Hello Stackoverflow!!!";
Intent notificationIntent = new Intent();
/*create new task for each notification with pending intent so we set Intent.FLAG_ACTIVITY_NEW_TASK */
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
/*get the system service that manage notification NotificationManager*/
NotificationManager notificationManager =(NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
/*build the notification*/
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(ctx)
.setWhen(when)
.setContentText(contentText)
.setContentTitle(contentTitle)
.setSmallIcon(smallIcon)
.setAutoCancel(true)
.setTicker(contentTitle)
.setLargeIcon(largeIcon)
.setContentIntent(pendingIntent);
/*sending notification to system. Here we use unique id (when)for making different each notification
* if we use same id, then first notification replace by the last notification*/
notificationManager.notify((int) when, notificationBuilder.build());
} catch (Exception e) {
Log.e("Notification Exception", e.getMessage());
}
}
答案 3 :(得分:1)
我认为该警告涉及您使用较新的SDK构建的事实(由于您的targetSDKVersion更高)。因此,您实际上可以使用较新的方法,但在使用时需要小心,因为低于目标API级别但高于最低API级别的设备将无法使用较新的API。您可以在使用较新的呼叫之前检查API级别,以便安全地使用它们。
例如,如果您想在minSDK为2.3时使用Android 4.1方法,则可以执行以下操作:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
// API Specific code here
}
在这种情况下,警告无关紧要。您可以在类或方法中添加@SuppressWarnings(“弃用”)。
答案 4 :(得分:1)
最好的办法是使用兼容性库并忘记这个问题:
http://developer.android.com/guide/topics/ui/notifiers/notifications.html
通过这种方式,您可以享受通知的所有最新功能......