通知
效果展示
一.相关类
构建通知 | 管理通知 |
---|---|
NotificationCompat | NotificationManager |
二.NotificationCompat.Builder常用方法
-
setSmallIcon
-
setContentTitle
-
setContentText
-
setContentInfo
-
setContent
-
setWhen
-
setShowWhen
-
setGroup
-
setGroupSummary
-
setContentIntent
-
setTicker
-
setDefaults
-
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.bq1));
-
builder.setTicker(“来消息了”);
-
builder.setDefaults(Notification.DEFAULT_ALL);
-
builder.setVisibility(Notification.VISIBILITY_PUBLIC);
-
VISIBILITY_PUBLIC: 任何情况的显示 VISIBILITY_PRIVATE: 只有在没有锁屏时显示 VISIBILITY_SECRET: 在安全锁下或者没锁屏下显示
-
setFullScreenIntent 横幅通知
三.通知样式
- BigTextStyle
- InboxStyle
- BigPictureStyle
四.普通通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.iphone);
builder.setContentTitle("来电话了");
builder.setContentText("妈妈喊你回家吃饭");
builder.setContentInfo("吃午饭");
builder.setWhen(System.currentTimeMillis());
builder.setShowWhen(true);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(100,builder.build());
五.进度条通知
public void showProgressNotification(View view) {
builder = new Notification.Builder(this);
builder.setContentTitle("普通通知标题");
builder.setContentText("通知内容");
builder.setContentInfo("info..info");
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.bq1));
builder.setSmallIcon(R.mipmap.address);
builder.setWhen(System.currentTimeMillis());
builder.setTicker("来消息了");
builder.setDefaults(Notification.DEFAULT_ALL);
CountDownTimer countDownTimer = new CountDownTimer(10000,1000) {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onTick(long millisUntilFinished) {
proNum+=10;
builder.setProgress(100,proNum,false);
manager.notify(2,builder.build());
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onFinish() {
builder.setProgress(0,0,true);
manager.notify(2,builder.build());
manager.cancel(2);
}
};
countDownTimer.start();
}
六.长文本样式进度条
public void notificationStyle(){
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.bq1));
android.support.v4.app.NotificationCompat.BigTextStyle style = new android.support.v4.app.NotificationCompat.BigTextStyle();
style.bigText("这里是点击通知后要显示的正文,可以换行可以显示很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长");
style.setBigContentTitle("点击后的标题");
builder.setStyle(style);
manager.notify(102,builder.build());
}
七.分组通知
public void groupNotification(View view){
builder = new Notification.Builder(this);
builder.setContentTitle("第一小分队");
builder.setContentText("第一小分队以爱岗敬业为主");
builder.setSmallIcon(R.mipmap.iphone);
builder.setGroup("group1");
builder.setGroupSummary(true);
manager.notify(104,builder.build());
NotificationCompat.Builder builder1 = new NotificationCompat.Builder(this);
builder1.setSmallIcon(R.mipmap.address);
builder1.setContentTitle("第二小分队");
builder1.setContentText("第二小分队和第一小分队一样一样的");
builder1.setGroup("group1");
builder1.setGroupSummary(true);
manager.notify(105,builder1.build());
}
八.自动回复通知
public void zidonghuifu(){
RemoteInput input = new RemoteInput.Builder("key").build();
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.case_fill1);
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
NotificationCompat.Action.Builder actionBuilder =
new NotificationCompat.Action.Builder(R.mipmap.iphone,"自动回复通知标题",pendingIntent);
actionBuilder.addRemoteInput(input);
builder.addAction(actionBuilder.build()); //action
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(++notification_id,builder.build());
}
九.自定义通知
1.定义通知布局
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp"
android:contentDescription="@string/Image" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
style="@style/NotificationTitle" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/title"
style="@style/NotificationText" />
2.编写核心代码
RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification);
contentView.setImageViewResource(R.id.image, R.drawable.notification_image);
contentView.setTextViewText(R.id.title, "自定义通知标题");
contentView.setTextViewText(R.id.text, "自定义通知内容");
builder.setCustomContentView(contentView);
十.双击退出
public boolean onKeyDown(int keyCode, KeyEvent event) {
Toast.makeText(this, "点击退出", Toast.LENGTH_SHORT).show();
//如果按下的是退出按钮
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
long second = System.currentTimeMillis();
if(second - first > 2000){
Toast.makeText(this, "再按一次", Toast.LENGTH_SHORT).show();
first = second;
}
else
finish();
}
return false;
}