2013-12-02 4 views
1

Я делаю одно приложение для Android. В моем коде в моем классе java я получаю сообщение: «Уведомление конструктора (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); 

      } 
     }); 
    } 

} 

ответ

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 обеспечивает большую гибкость в установлении различных свойств уведомлений и улучшает читаемость кода , что может быть причиной того, что конструктор уведомления был устаревшим.

+0

Я хотел бы использовать этот код в проекте, который должен быть совместим с уровнем API 8. Но я не вижу никаких расширений для его использования, поскольку его не в пакете v4 –

+0

@Heinzi Я не могу найти класс уведомлений для создания контекста , Существует только класс Notification без 's', но объект контекста не примет его. –

+1

@MinNaingOo: Замените «Уведомления» названием класса вашей деятельности. (См. Первую строку в примере кода исходного вопроса.) – Heinzi

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, длинный)

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(); 
} 

Надеюсь, что это поможет!

Смежные вопросы