2012-07-07 9 views
5

To jest mój kod:Dlaczego Eclipse nie rozpoznaje metody build() z klasy Notification.Builder, aby zwrócić obiekt powiadomienia?


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

Działa znaleźć, ale stosując Notification notification = builder.getNotification(); jest przestarzała. tak jak powinienem robić Notification notification = builder.build();. Problem polega na tym, że Eclipse nie rozpoznaje go jako takiego, co oznacza, że ​​nie pozwoli mi się skompilować. W dokumencie jest jasne, że istnieje build() i jest to preferowana metoda, ale nie działa po mojej stronie. Chciałbym użyć nieoficjalnego kodu, więc każda pomoc będzie doceniana.

import


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; 

Należy pamiętać, że import android.app.Notification.Builder; mówi jego nie jest używana.

+0

Tak, proszę pana. Właśnie zaktualizowałem – Andy

+1

Czy kierujesz interfejs API 16? 'build()' jest nowe w Jelly Bean. – Eric

+1

Z jakiego interfejsu API korzystasz? – Sam

Odpowiedz

2

Jeśli chcesz rozwijać dla wersji SDK niższy niż 11, można użyć tego kodu zamiast android.app.Notification.Builder klasa dla zgłoszenia utworzenia:

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

You może anulować to powiadomienie w YourActivity w ten sposób:

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

Co oznacza znak potoku i równości '| ='. Czy jest to specyficzne dla java. Ale dzięki. – Andy

+0

Tak. Jest to jeden z operatorów logicznych w Javie. Operator ** obejmujący wiele bitów OR ** (|) wykonuje bitową operację OR włącznie na każdej równoległej parze bitów dwóch operandów. W każdej parze wynik wynosi 1, jeśli pierwszy lub drugi bit to 1 (lub oba są 1). W przeciwnym razie wynik wynosi 0. W przypadku użycia z instrukcją złożoną, taką jak ** x | = y **, należy ją odczytać jako ** x = x | y ** – anivaler

1

Dzieje się tak tylko wtedy, gdy kompilujesz kod aplikacji do wersji, która nie ma wymaganej metody /api (w twoim przypadku jest to build()).

Jeśli kompilacja nie jest dostępna w wersji, z którą się kompilujesz, proponuję kompilację z wyższą wersją Androida, zawsze masz minimalną wersję sdk w manifeście ze względu na kompatybilność wsteczną.

Dzięki

+0

Ale moją wersją sdk jest ICS, która powinna to mieć. Chociaż widzę, co mówisz. – Andy

Powiązane problemy