Zauważyłem, że używam przestarzałej metody dla noficitations (notification.setLatestEventInfo ())
Mówi, aby użyć Notification.Builder.
- Jak tego używam?
Kiedy próbuję utworzyć nową instancję, mówi mi:
Notification.Builder cannot be resolved to a type
Zauważyłem, że używam przestarzałej metody dla noficitations (notification.setLatestEventInfo ())
Mówi, aby użyć Notification.Builder.
Kiedy próbuję utworzyć nową instancję, mówi mi:
Notification.Builder cannot be resolved to a type
Odpowiedzi:
To jest w API 11, więc jeśli tworzysz coś wcześniejszego niż 3.0, powinieneś nadal używać starego API.
Aktualizacja : klasa NotificationCompat.Builder została dodana do pakietu pomocy technicznej, dzięki czemu możemy użyć jej do obsługi poziomu API v4 i nowszych:
http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
Notification.Builder API 11 lub NotificationCompat.Builder API 1
To jest przykład użycia.
Intent notificationIntent = new Intent(ctx, YourClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(ctx,
YOUR_PI_REQ_CODE, notificationIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
NotificationManager nm = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
Resources res = ctx.getResources();
Notification.Builder builder = new Notification.Builder(ctx);
builder.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.some_img)
.setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.some_big_img))
.setTicker(res.getString(R.string.your_ticker))
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentTitle(res.getString(R.string.your_notif_title))
.setContentText(res.getString(R.string.your_notif_text));
Notification n = builder.build();
nm.notify(YOUR_NOTIF_ID, n);
Notification.Builderstronie z dokumentami. Robiłem to, co mówili, ale nie miało to żadnego sensu. Przychodzę tutaj i widzę, że jest inaczej. Naprawdę doceniam twoją odpowiedź, ponieważ to uczyniło mnie świadomym błędu, który jest na doktorze.
builder.getNotification()jest przestarzała. Mówi, że powinieneś użyć builder.build().
setSmallIcon(), setContentTitle()i setContentText()są minimalne wymagania.
oprócz wybranej odpowiedzi tutaj jest przykładowy kod dla NotificationCompat.Builderklasy z Source Tricks :
// Add app running notification
private void addNotification() {
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Notifications Example")
.setContentText("This is a test notification");
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
// Add as notification
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(FM_NOTIFICATION_ID, builder.build());
}
// Remove notification
private void removeNotification() {
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(FM_NOTIFICATION_ID);
}
Narzędzie Notification Builder jest przeznaczone wyłącznie dla interfejsu API systemu Android na poziomie 11 lub nowszym (Android 3.0 i nowsze).
Dlatego jeśli nie kierujesz reklamy na tablety Honeycomb, nie powinieneś używać narzędzia Notification Builder, ale raczej postępować zgodnie ze starszymi metodami tworzenia powiadomień, takimi jak poniższy przykład .
Aby uzyskać więcej informacji, odwiedź łącze Aktualizacje powiadomień .
Android N umożliwia także grupowanie podobnych powiadomień, aby pojawiały się jako pojedyncze powiadomienie. Aby było to możliwe, Android N korzysta z istniejącego
NotificationCompat.Builder.setGroup()metody. Użytkownicy mogą rozwijać każde z powiadomień i wykonywać czynności, takie jak odpowiadanie i odrzucanie każdego z powiadomień, indywidualnie z poziomu powiadomień.To jest wcześniej istniejący przykład, który przedstawia prostą usługę, która wysyła powiadomienia przy użyciu NotificationCompat. Każda nieprzeczytana rozmowa użytkownika jest wysyłana jako osobne powiadomienie.
Ten przykład został zaktualizowany, aby wykorzystać nowe funkcje powiadomień dostępne w systemie Android N.
Miałem problem z tworzeniem powiadomień (tylko dla Androida 4.0+). Ten link pokazał mi dokładnie, co robię źle i mówi, co następuje:
Required notification contents
A Notification object must contain the following:
A small icon, set by setSmallIcon()
A title, set by setContentTitle()
Detail text, set by setContentText()
Zasadniczo brakowało mi jednego z nich. Jako podstawę do rozwiązywania problemów z tym, upewnij się, że masz przynajmniej wszystkie z nich. Miejmy nadzieję, że to uratuje komuś ból głowy.
Na wypadek, gdyby to komuś pomogło ... Miałem duży problem z konfiguracją powiadomień za pomocą pakietu wsparcia podczas testowania na nowszych i starszych interfejsach API. Udało mi się zmusić je do pracy na nowszym urządzeniu, ale otrzymałem test błędu na starym urządzeniu. W końcu udało mi się usunąć wszystkie importy związane z funkcjami powiadomień. W szczególności NotificationCompat i TaskStackBuilder. Wygląda na to, że podczas konfigurowania mojego kodu na początku import został dodany z nowszej kompilacji, a nie z pakietu wsparcia. Potem, gdy chciałem później zaimplementować te elementy podczas zaćmienia, nie zostałem poproszony o ich ponowne importowanie. Mam nadzieję, że to ma sens i pomaga komuś innemu :)
Działa nawet w API 8, możesz użyć tego kodu:
Notification n =
new Notification(R.drawable.yourownpicturehere, getString(R.string.noticeMe),
System.currentTimeMillis());
PendingIntent i=PendingIntent.getActivity(this, 0,
new Intent(this, NotifyActivity.class),
0);
n.setLatestEventInfo(getApplicationContext(), getString(R.string.title), getString(R.string.message), i);
n.number=++count;
n.flags |= Notification.FLAG_AUTO_CANCEL;
n.flags |= Notification.DEFAULT_SOUND;
n.flags |= Notification.DEFAULT_VIBRATE;
n.ledARGB = 0xff0000ff;
n.flags |= Notification.FLAG_SHOW_LIGHTS;
// Now invoke the Notification Service
String notifService = Context.NOTIFICATION_SERVICE;
NotificationManager mgr =
(NotificationManager) getSystemService(notifService);
mgr.notify(NOTIFICATION_ID, n);
Lub proponuję zapoznać się z doskonałym samouczkiem na ten temat
używałem
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Firebase Push Notification")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
// This is a working Notification
private static final int NotificID=01;
b= (Button) findViewById(R.id.btn);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Notification notification=new Notification.Builder(MainActivity.this)
.setContentTitle("Notification Title")
.setContentText("Notification Description")
.setSmallIcon(R.mipmap.ic_launcher)
.build();
NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notification.flags |=Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(NotificID,notification);
}
});
}
Samodzielny przykład
Ta sama technika jak w tej odpowiedzi, ale:
Źródło:
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Main extends Activity {
private int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Button button = new Button(this);
button.setText("click me");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Notification notification = new Notification.Builder(Main.this)
/* Make app open when you click on the notification. */
.setContentIntent(PendingIntent.getActivity(
Main.this,
Main.this.i,
new Intent(Main.this, Main.class),
PendingIntent.FLAG_CANCEL_CURRENT))
.setContentTitle("title")
.setAutoCancel(true)
.setContentText(String.format("id = %d", Main.this.i))
// Starting on Android 5, only the alpha channel of the image matters.
// https://stackoverflow.com/a/35278871/895245
// `android.R.drawable` resources all seem suitable.
.setSmallIcon(android.R.drawable.star_on)
// Color of the background on which the alpha image wil drawn white.
.setColor(Color.RED)
.build();
final NotificationManager notificationManager =
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(Main.this.i, notification);
// If the same ID were used twice, the second notification would replace the first one.
//notificationManager.notify(0, notification);
Main.this.i++;
}
});
this.setContentView(button);
}
}
Przetestowano w systemie Android 22.