不建议使用构造函数

时间:2013-12-02 13:29:05

标签: android

我创建了一个android应用程序。在我的java类代码中,我得到了一些消息:“构造函数Notification(int,CharSequence,long)已被弃用”。应用程序一切正常我尝试运行应用程序时没有问题。  我只是想知道为什么这条消息出现了。 我在java类中的代码是:

public class Notifications extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notifications);

        Button b = (Button) findViewById(R.id.bNotifications);
        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                Notification notify = new Notification(
                        android.R.drawable.stat_notify_more,
                        "This is important", System.currentTimeMillis());
                Context context = Notifications.this;
                CharSequence title = "You have been notified";
                CharSequence details = "Continue with what you have doing";
                Intent intent = new Intent();
                PendingIntent pending = PendingIntent.getActivity(context, 0,
                        intent, 0);
                notify.setLatestEventInfo(context, title, details, pending);
                nm.notify(0, notify);

            }
        });
    }

}

3 个答案:

答案 0 :(得分:13)

查看the documentation

  

公开通知(int图标,CharSequence tickerText,长时间)

  在API级别1中添加

     

在API级别11中弃用了此构造函数。
  请改用Notification.Builder

据我所知,这是对Notification.Builder的相应调用:

Context context = Notifications.this;
Notification notify = new Notification.Builder(context)
     .setTicker("This is important")
     .setSmallIcon(android.R.drawable.stat_notify_more)
     .setWhen(System.currentTimeMillis())
     .build();

正如您所看到的,Notification.Builder在设置各种通知属性方面提供了更大的灵活性,并提高了代码的可读性,这可能是不推荐使用Notification构造函数的原因。

答案 1 :(得分:3)

有时,方法被弃用的事实并不意味着您不会需要它也不会使用它。因此,毕竟,您需要支持较旧的设备(不是最早的设备,如Android Donut或之前的设备),您将需要使用新的方式和不赞成使用的方式。在这种情况下,我实现如下:

Notification notification;
String title = context.getString(R.string.app_name);
if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN){
   notification = new Notification(icon, message, when);
}else{
   notification = new Notification.Builder(context)
   .setContentTitle(title)
   .setContentText(message)
   .setSmallIcon(R.drawable.ic_launcher)
   .build();
}

希望它有所帮助!

答案 2 :(得分:1)

由于不再建议使用API​​级别11 Notification(int icon, CharSequence tickerText, long when),因为存在替代方案。请改用Notification.Builder。

来源:http://developer.android.com/reference/android/app/Notification.html#Notification(int,java.lang.CharSequence,long)