一、通知的效果
实现的功能:点击通知按钮发送一条通知,打开状态栏看到通知信息,点击通知跳转到通知的页面。
二、实现步骤
首先是发送通知的步骤:
1)第一步需要一个NotificationManager来对通知进行管理
2)第二步使用NotificationCompat类的构造器来创建Notification对象
3)第三步,调用NotificationManager的notify()方法让通知显示出来
其中通知的一些属性设置如下:
- setContentTitle(“这是通知的标题”) //用于指定通知的标题内容
- setContentText(“这是通知的内容”) //用于指定通知的正文内容
- setWhen(System.currentTimeMillis()) //用于指定通知被创建的时间,以毫秒为单位
- setSmallIcon(R.mipmap.ic_launcher) //用于设置通知的小图标
- setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)) //用于设置通知的大图标
- setContentIntent(PendingIntent对象) //设置点击跳转
- setAutoCancel(true) //当点击了这个通知的时候,通知自动消失 也可以用manager.cancel(通知的id)取消
- setSound(Uri) //在通知发出的时候播放一段音频
- setVibrate(new long[]{0,1000,1000,1000}) //当通知到来时让手机震动,注意要加权限声明
- setLights(Color.GREEN,1000,1000) //设置LED灯闪烁,三个参数分别指定灯的颜色、灯亮时长、灯暗去的时长
- setDefaults(NotificationCompat.DEFAULT_ALL) //通知的默认效果
- setPriority(NotificationCompat.PRIORITY_MAX) //设置通知的优先级
点击通知进行跳转的实现:
Intent intent = new Intent(MainActivity.this,NotificationActivity.class)
PendingIntent pi = PendingIntent.getActivity(MainActivity.this,0,intent,0);
//PendingIntent可以理解为延迟执行的Intent
//第一个参数是上下文
//第二个参数是响应码,一般不用不到
//第三个参数是Intent对象,用来构建出PendingIntent的意图
//第四个参数用来确定PendingIntent的行为,四个值可选
// FLAG_ONE_SHOT:获取的PendingIntent只能使用一次
// FLAG_NO_CREATE:若描述的Intent不存在则返回null值
// FLAG_CANCEL_CURRENT:若描述的PendingIntent已存在,则在产生新的Intent之前会取消掉当前的
// FLAG_UPDATE_CURRENT:最经常使用,因为描述的Intent有更新的时候,这个flag也会去更新你的描述
三、源码
1、主界面
布局 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:text="通知的使用"
android:textSize="25dp"
android:gravity="center"
android:textColor="#000"/>
<Button
android:id="@+id/btn_sedNotice"
android:layout_width="match_parent"
android:layout_height="80dp"
android:text="发送通知"
android:textSize="20dp"
android:layout_marginTop="20dp"/>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button btn_sedNotice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
btn_sedNotice = (Button) findViewById(R.id.btn_sedNotice);
btn_sedNotice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//设置通知的点击跳转事件
Intent intent = new Intent(MainActivity.this,NotificationActivity.class);
//PendingIntent可以理解为延迟执行的Intent
//第一个参数是上下文
//第二个参数是响应码,一般不用不到
//第三个参数是Intent对象,用来构建出PendingIntent的意图
//第四个参数用来确定PendingIntent的行为,四个值可选
// FLAG_ONE_SHOT:获取的PendingIntent只能使用一次
// FLAG_NO_CREATE:若描述的Intent不存在则返回null值
// FLAG_CANCEL_CURRENT:若描述的PendingIntent已存在,则在产生新的Intent之前会取消掉当前的
// FLAG_UPDATE_CURRENT:最经常使用,因为描述的Intent有更新的时候,这个flag也会去更新你的描述
PendingIntent pi = PendingIntent.getActivity(MainActivity.this,0,intent,0);
//创建通知的步骤:
//第一步需要一个NotificationManager来对通知进行管理
//getSystemService()方法接受一个字符串用于确定获取系统的哪个服务
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//第二步使用NotificationCompat类的构造器来创建Notification对象
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知的标题") //用于指定通知的标题内容
.setContentText("这是通知的内容") //用于指定通知的正文内容
.setWhen(System.currentTimeMillis()) //用于指定通知被创建的时间,以毫秒为单位
.setSmallIcon(R.mipmap.ic_launcher) //用于设置通知的小图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)) //用于设置通知的大图标
.setContentIntent(pi) //设置点击跳转
.setAutoCancel(true) //当点击了这个通知的时候,通知自动消失 也可以用manager.cancel(通知的id)取消
//.setSound(Uri) 在通知发出的时候播放一段音频
.setVibrate(new long[]{0,1000,1000,1000}) //当通知到来时让手机震动
//vibrate要传入一个长整型数组,以毫秒为单位,第一个数表示手机静止的时长,第二个数表示手机震动的时长,
//第三个数又是手机震动的时长,以此类推。上面的数据表示手机立即振动1s,然后静止1s,然后又振动1s
.setLights(Color.GREEN,1000,1000) //设置LED灯闪烁,三个参数分别指定灯的颜色、灯亮时长、灯暗去的时长
//setDefaults(NotificationCompat.DEFAULT_ALL) 通知的默认效果
.setPriority(NotificationCompat.PRIORITY_MAX)
//设置通知的重要程度,有五个常量值可选
//PRIORITY_DEFAULT 表示默认重要程度,和不设置效果一样
//PRIORITY_MIN 表示最低的重要程度
//PRIORITY_LOW 表示较低的重要程度
//PRIORITY_HIGH 表示较高的重要程度
//PRIORITY_MAX 表示最高的重要程度
.build();
//第三步,调用NotificationManager的notify()方法让通知显示出来
//notify()方法接收两个参数,第一个参数id用于区分每个通知,第二个参数是Notification对象
manager.notify(1,notification);
}
});
}
}
2、通知页面
布局activity_notification.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="25sp"
android:text="这是通知页面"
android:textColor="#000"/>
</RelativeLayout>
NotifivationActivity.java
public class NotificationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notification);
}
}
3、权限声明
手机震动的权限声明
<uses-permission android:name="android.permission.VIBRATE"/>