ฉันพบว่าฉันใช้เมธอดที่เลิกใช้แล้วสำหรับ noficitations (notification.setLatestEventInfo ())
มันบอกว่าให้ใช้ Notification.Builder
- ฉันจะใช้มันได้อย่างไร?
เมื่อฉันพยายามสร้างอินสแตนซ์ใหม่มันบอกฉัน:
Notification.Builder cannot be resolved to a type
ฉันพบว่าฉันใช้เมธอดที่เลิกใช้แล้วสำหรับ noficitations (notification.setLatestEventInfo ())
มันบอกว่าให้ใช้ Notification.Builder
เมื่อฉันพยายามสร้างอินสแตนซ์ใหม่มันบอกฉัน:
Notification.Builder cannot be resolved to a type
คำตอบ:
สิ่งนี้อยู่ใน API 11 ดังนั้นหากคุณกำลังพัฒนาอะไรที่เร็วกว่า 3.0 คุณควรใช้ API เก่าต่อไป
อัปเดต : มีการเพิ่มคลาส NotificationCompat.Builder ใน Support Package เพื่อให้เราสามารถใช้สิ่งนี้เพื่อรองรับ API ระดับ v4 ขึ้นไป:
http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
Notification.Builder API 11หรือNotificationCompat.Builder API 1
นี่คือตัวอย่างการใช้งาน
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.Builder
หน้าเอกสาร ฉันกำลังทำตามที่พวกเขาพูด แต่มันไม่สมเหตุสมผลเลย ฉันมาที่นี่และเห็นว่ามันแตกต่างกัน ฉันขอขอบคุณสำหรับคำตอบของคุณเนื่องจากทำให้ฉันทราบถึงความผิดพลาดในเอกสาร
builder.getNotification()
เลิกใช้งานแล้ว builder.build()
มันบอกว่าคุณควรใช้
setSmallIcon()
, setContentTitle()
และsetContentText()
เป็นความต้องการขั้นต่ำ
นอกจากคำตอบที่เลือกแล้วนี่คือโค้ดตัวอย่างสำหรับNotificationCompat.Builder
คลาสจาก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);
}
โปรดไปที่ลิงค์การอัปเดตการแจ้งเตือนสำหรับรายละเอียดเพิ่มเติม
Android N ยังช่วยให้คุณสามารถรวมการแจ้งเตือนที่คล้ายกันเพื่อให้ปรากฏเป็นการแจ้งเตือนเดียว เพื่อให้เป็นไปได้ Android N ใช้ไฟล์
NotificationCompat.Builder.setGroup()
วิธีการผู้ใช้สามารถขยายการแจ้งเตือนแต่ละรายการและดำเนินการต่างๆเช่นตอบกลับและปิดการแจ้งเตือนแต่ละรายการแยกกันจากหน้าต่างแจ้งเตือนนี่คือตัวอย่างที่มีอยู่แล้วซึ่งแสดงบริการง่ายๆที่ส่งการแจ้งเตือนโดยใช้ NotificationCompat การสนทนาที่ยังไม่ได้อ่านแต่ละรายการจากผู้ใช้จะถูกส่งเป็นการแจ้งเตือนที่แตกต่างกัน
ตัวอย่างนี้ได้รับการอัปเดตเพื่อใช้ประโยชน์จากคุณสมบัติการแจ้งเตือนใหม่ที่มีใน Android N
ฉันมีปัญหาในการสร้างการแจ้งเตือน (พัฒนาสำหรับ Android 4.0+ เท่านั้น) ลิงก์นี้แสดงให้ฉันเห็นว่าฉันทำอะไรผิดพลาดและพูดสิ่งต่อไปนี้:
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()
โดยพื้นฐานแล้วฉันพลาดสิ่งเหล่านี้ไป เพื่อเป็นพื้นฐานในการแก้ไขปัญหานี้ตรวจสอบให้แน่ใจว่าคุณมีสิ่งเหล่านี้ทั้งหมดอย่างน้อยที่สุด หวังว่านี่จะช่วยให้คนอื่นปวดหัวได้
ใช้งานได้แม้ใน API 8 คุณสามารถใช้รหัสนี้:
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);
หรือฉันขอแนะนำให้ทำตามบทแนะนำที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้
ฉันได้ใช้
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());
ในกรณีที่มันช่วยทุกคน ... ฉันมีปัญหากับการตั้งค่าการแจ้งเตือนโดยใช้แพ็คเกจการสนับสนุนเมื่อทดสอบกับ API รุ่นเก่าที่ใหม่กว่า ฉันสามารถทำให้พวกเขาทำงานบนอุปกรณ์รุ่นใหม่ได้ แต่จะได้รับการทดสอบข้อผิดพลาดในอุปกรณ์เครื่องเก่า ในที่สุดสิ่งที่ทำให้ฉันได้ผลคือการลบการนำเข้าทั้งหมดที่เกี่ยวข้องกับฟังก์ชันการแจ้งเตือน โดยเฉพาะ NotificationCompat และ TaskStackBuilder ดูเหมือนว่าในขณะตั้งค่ารหัสของฉันในช่วงเริ่มต้นการนำเข้าที่เพิ่มจากบิลด์ที่ใหม่กว่าไม่ใช่จากแพ็คเกจการสนับสนุน จากนั้นเมื่อฉันต้องการใช้ไอเท็มเหล่านี้ในภายหลังในคราสฉันไม่ได้รับแจ้งให้นำเข้าอีกครั้ง หวังว่าคงสมเหตุสมผลและจะช่วยให้คนอื่นได้รับ :)
// 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);
}
});
}
ตัวอย่างที่มีอยู่ในตัว
เทคนิคเดียวกับในคำตอบนี้แต่:
ที่มา:
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);
}
}
ทดสอบใน Android 22