转载请注明出处:
http://blog.youkuaiyun.com/xiaohao0724/article/details/63682146
在开发中经常会用到推送给用户通知、消息等的情况,今天就跟大家一起来学习推送消息时通知栏的通知Notification。
通知栏消息通知的使用步骤
一般可以分为以下步骤:
1. 首先需要一个NotificationManager对通知进行管理
2. 为了兼容低版本使用v4包中的NotificationCompat类的构造器来build Notification对象
3. 在build同时可以添加Notification的标题、内容、时间、图片等通知参数和内容
4. 创建点击通知时要跳转的页面
5. 获取要跳转页面的PendingIntent对象,并在build Notification对象时关联
6. NotificationManager notify发送消息通知
下面就带大家来实现通知栏消息Notification,先上图如下:
使用通知代码实现
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.noamal).setOnClickListener(this);
findViewById(R.id.word).setOnClickListener(this);
findViewById(R.id.picture).setOnClickListener(this);
}
void notification(int type) {
Notification notification;
Intent intent = new Intent(this, NotificationDetailsActivity.class);
//点击通知栏消息跳转页
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
//创建通知消息管理类
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)//创建通知消息实例
.setContentTitle("我是标题")
.setContentText("我是内容")
.setWhen(System.currentTimeMillis())//通知栏显示时间
.setSmallIcon(R.mipmap.ic_launcher)//通知栏小图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.icon))//通知栏下拉是图标
.setContentIntent(pendingIntent)//关联点击通知栏跳转页面
.setPriority(NotificationCompat.PRIORITY_MAX)//设置通知消息优先级
.setAutoCancel(true)//设置点击通知栏消息后,通知消息自动消失
// .setSound(Uri.fromFile(new File("/system/MP3/music.mp3"))) //通知栏消息提示音
// .setVibrate(new long[]{0, 1000, 1000, 1000}) //通知栏消息震动
// .setLights(Color.GREEN, 1000, 2000) //通知栏消息闪灯(亮一秒间隔两秒再亮)
.setDefaults(NotificationCompat.DEFAULT_ALL); //通知栏提示音、震动、闪灯等都设置为默认
switch (type) {
case 1:
notification = builder.build();
//id为通知栏消息标识符,每个id都是不同的
manager.notify(Constant.NOAMAL, notification);
break;
case 2:
notification = builder.setStyle(new NotificationCompat.BigTextStyle().bigText("我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容,我是长文字内容"))
.build();
manager.notify(Constant.WORD, notification);
break;
case 3:
notification = builder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.big)))
.build();
manager.notify(Constant.PICTURE, notification);
break;
default:
break;
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.noamal:
notification(1);
break;
case R.id.word:
notification(2);
break;
case R.id.picture:
notification(3);
break;
}
}
}
点击通知栏跳转到的页面
public class NotificationDetailsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("我是通知详情页");
setContentView(textView);
// NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//当点击通知消息跳转到详情页时根据通知消息的id关闭通知栏的显示
// manager.cancel(Constant.NOAMAL);
// manager.cancel(Constant.WORD);
// manager.cancel(Constant.PICTURE);
}
}
发送消息通知的id
public class Constant {
public static int NOAMAL = 1;
public static int WORD = 2;
public static int PICTURE = 3;
}