2012-07-07 12 views
5

Questo è il mio codice:Perché Eclipse non riconosce il metodo build() dalla classe Notification.Builder per restituire un oggetto di notifica?


NotificationManager mNotificationManager = (NotificationManager) c.getSystemService(ns); 

    //Instantiate the notification 

    CharSequence tickerText = "Hello"; 
    long when = System.currentTimeMillis(); 
    Notification.Builder builder = new Notification.Builder(c) 
           .setTicker(tickerText) 
           .setWhen(when) 
           .setContentTitle("Test Notification") 
           .setContentText(arg1.getStringExtra("info")) 
           .setSmallIcon(R.drawable.ic_launcher) 
           .setAutoCancel(true); 
    Notification notification = builder.getNotification(); 
    mNotificationManager.notify(88, notification); 

funziona Trova, ma utilizzando Notification notification = builder.getNotification(); è deprecato. come dovrei fare Notification notification = builder.build();. Il problema è che Eclipse non lo riconosce come tale, il che significa che non mi permetterà di compilare. Il documento è chiaro che esiste build() ed è il metodo preferito, ma non funziona sulla mia parte. Vorrei usare un codice non deprecato, quindi qualsiasi aiuto sarà molto apprezzato.

importazioni


import android.app.Notification; 
import android.app.Notification.Builder; 
import android.app.NotificationManager; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

essere consapevoli del fatto che import android.app.Notification.Builder; sta dicendo la sua non è in uso.

+0

Sì signore. Ho appena aggiornato – Andy

+1

Hai scelto come target l'API 16? 'build()' è nuovo in Jelly Bean. – Eric

+1

Che API stai usando? – Sam

risposta

2

Se si vuole sviluppare per la versione SDK inferiore a 11, è possibile utilizzare questo codice al posto android.app.Notification.Builder classe per la notifica di creazione:

private void createNotification(){ 
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.ic_launcher, "Hello", System.currentTimeMillis()); 
    Intent notificationIntent = new Intent(this, YourActivity.class); 

    Random r = new Random(); 
    int notificationId = r.nextInt(); 
    notificationIntent.putExtra("n_id", notificationId); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, notificationId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.defaults |= Notification.DEFAULT_SOUND; 
    notification.setLatestEventInfo(this, "Party", "Welcome!", contentIntent); 
    mNotificationManager.notify(notificationId, notification);  
} 

È può annullare questa notifica in YourActivity in questo modo:

public class YourActivity extends Activity{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_activity); 

    int notificationId = getIntent().getIntExtra("n_id", -1); 

    if (notificationId!=-1) { 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.cancel(notificationId); 
    } 
    } 
} 
+0

Cosa significa il segno pipe and equals '| = =. È specifico di Java. Ma grazie. – Andy

+0

Sì. È uno degli operatori logici in Java. L'operatore ** bitwise + OR ** (|) esegue l'operazione OR inclusa bit a bit su ciascuna coppia parallela di bit di due operandi. In ogni coppia, il risultato è 1, se il primo o il secondo bit è 1 (o entrambi sono 1). In caso contrario, il risultato è 0. Se utilizzato con un'istruzione composta come ** x | = y ** deve essere letto come ** x = x | y ** – anivaler

1

Questo accade solo quando, si sta compilando il codice dell'app contro la versione che non è richiesta metodo/api (nel tuo caso è build()).

Se build non è disponibile nella versione che si sta compilando, ti suggerirò di compilare con la versione superiore di Android, hai sempre versione sdk minima in manifest per compatibilità con le versioni precedenti.

Grazie

+0

Ma la mia versione di sdk è ICS, che dovrebbe avere questo. Anche se vedo quello che stai dicendo. – Andy