我需要创建一个简单的通知,将在通知栏用声音和图标,如果可以一起显示来? 我还需要它compatitible与Android 2.2,所以我发现,NotificationCompat.Builder适用于所有的API上述4.如果有一个更好的解决方案,可随时提。
Answer 1:
该NotificationCompat.Builder是创建最简单的方式Notifications
所有的Android版本。 你甚至可以使用可用的Android 4.1功能。 如果您的应用程序与Android设备上运行> = 4.1的新功能将被使用,如果运行在Android <4.1的通知将是一个简单的老的通知。
要创建一个简单的通知只是(见的通知的Android API指南 ):
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!")
.setContentIntent(pendingIntent); //Required on Gingerbread and below
你必须设置至少smallIcon
, contentTitle
和contentText
。 如果你错过了一个通知将不会显示。
当心:在姜饼及以下,你必须设置内容的意图,否则IllegalArgumentException
将被抛出。
要创建一个什么也不做的目的,使用方法:
final Intent emptyIntent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, NOT_USED, emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
你可以通过参数中加入声音,即从RingtoneManager一个声音:
mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
该通知被加入到通过NotificationManager吧:
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(mId, mBuilder.build());
Answer 2:
工作示例:
Intent intent = new Intent(ctx, HomeActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder b = new NotificationCompat.Builder(ctx);
b.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher)
.setTicker("Hearty365")
.setContentTitle("Default notification")
.setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
.setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
.setContentIntent(contentIntent)
.setContentInfo("Info");
NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, b.build());
Answer 3:
我有这样的方法,做工精细。 (在机器人6.0.1测试)
public void notifyThis(String title, String message) {
NotificationCompat.Builder b = new NotificationCompat.Builder(this.context);
b.setAutoCancel(true)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.favicon32)
.setTicker("{your tiny message}")
.setContentTitle(title)
.setContentText(message)
.setContentInfo("INFO");
NotificationManager nm = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(1, b.build());
}
Answer 4:
通知在深度
码
Intent intent = new Intent(this, SecondActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.your_notification_icon)
.setContentTitle("Notification Title")
.setContentText("Notification ")
.setContentIntent(pendingIntent );
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mBuilder.build());
深入了解
通知可以用建立通知。 Builder或NotificationCompat.Builder类。
但是如果你想向后兼容性,你应该使用NotificationCompat.Builder类,因为它是V4支持库的一部分,因为它负责繁重的工作提供一致的外观和通知功能的API 4及以上。
核心通知属性
通知有4种芯性能(3个基本显示属性+ 1次点击动作特性)
- 小图标
- 标题
- 文本
- 按钮单击事件(当您点击通知Click事件)
按钮单击事件是由可选在Android 3.0及以上。 这意味着,你可以,如果你的目标minSdk的Android 3.0或以上版本仅使用显示属性建立您的通知。 但是,如果你希望你的通知上比Android 3.0较旧的设备上运行,那么你必须提供点击事件,否则你将看到IllegalArgumentException异常。
通知显示
通知是通过调用通知()NotificationManger类的方法显示
通知()参数
有可用的通知方法两种变体
notify(String tag, int id, Notification notification)
要么
notify(int id, Notification notification)
通知方法接受一个整数ID来唯一地标识您的通知。 但是,您也可以在冲突的情况下,您的通知中进一步识别提供了一个可选的字符串标签。
这种类型的冲突是罕见的,但说,你已经创造了一些图书馆和其他开发人员使用您的图书馆。 现在,他们创建自己的通知,不知怎么的通知和其他开发人员的通知ID是相同的,那么你将面临冲突。
API 11(更对照)后通知
API 11提供的通知行为的其他控制
通知解雇
默认情况下,如果用户点击通知,然后进行分配click事件,但它不清除的通知。 如果你希望你的通知,即可清除时就应该添加这个mBuilder.setAutoClear(真);
辞退通知防止用户
用户还可以通过滑动它关闭通知。 您可以通过添加此同时建立您的通知禁用此默认行为mBuilder.setOngoing(真);
通知定位
您可以通过相对优先级设为您的通知mBuilder.setOngoing(INT PRI);
如果您的应用程序在较低API的运行速度比11那么您的通知将工作没有上述附加功能。 这是优势选择NotificationCompat.Builder超过Notification.Builder
API 16后通知(更多的信息)
通过引入API 16,通知被赋予这么多的新功能
通知可以被这么多信息。
您可以添加到bigPicture您的标志。 假设你从一个人的消息,现在与mBuilder.setLargeIcon(位图位图)你能证明人的照片。 因此,在状态栏,你会看到图标滚动时,你会看到在地方的图标的人的照片。 还有其他一些特点
- 添加计数器通知
- 当你看到的第一次通知北京时间消息
- 可扩展的通知
- 多行通知等
Answer 5:
你可以试试这个代码能正常工作对我来说:
NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this);
Intent i = new Intent(noti.this, Xyz_activtiy.class);
PendingIntent pendingIntent= PendingIntent.getActivity(this,0,i,0);
mBuilder.setAutoCancel(true);
mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
mBuilder.setWhen(20000);
mBuilder.setTicker("Ticker");
mBuilder.setContentInfo("Info");
mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.drawable.home);
mBuilder.setContentTitle("New notification title");
mBuilder.setContentText("Notification text");
mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(2,mBuilder.build());
Answer 6:
为补充通知简单的方法
NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher) //icon
.setContentTitle("Test") //tittle
.setAutoCancel(true)//swipe for delete
.setContentText("Hello Hello"); //content
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, builder.build()
);
Answer 7:
显示Notificaton在安卓8.0
@TargetApi(Build.VERSION_CODES.O)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public void show_Notification(){
Intent intent=new Intent(getApplicationContext(),MainActivity.class);
String CHANNEL_ID="MYCHANNEL";
NotificationChannel notificationChannel=new NotificationChannel(CHANNEL_ID,"name",NotificationManager.IMPORTANCE_LOW);
PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),1,intent,0);
Notification notification=new Notification.Builder(getApplicationContext(),CHANNEL_ID)
.setContentText("Heading")
.setContentTitle("subheading")
.setContentIntent(pendingIntent)
.addAction(android.R.drawable.sym_action_chat,"Title",pendingIntent)
.setChannelId(CHANNEL_ID)
.setSmallIcon(android.R.drawable.sym_action_chat)
.build();
NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(notificationChannel);
notificationManager.notify(1,notification);
}
Answer 8:
使用此代码。
Intent intent = new Intent(getApplicationContext(), SomeActvity.class);
PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),
(int) System.currentTimeMillis(), intent, 0);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(R.drawable.your_notification_icon)
.setContentTitle("Notification title")
.setContentText("Notification message!")
.setContentIntent(pIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mBuilder.build());