Android8.0 Notification

android8.0通知以后需要channel

先上代码
MainActivity

/*
* 发送通知的步骤
* 1.创建一个频道,需要id,name,importance三个参数
* 2.创建一个NotificationManager,然后create上面的频道
* 3.创建一个Notification,中间设置内容标题啥的,一定要setChannelId()。获取Notification实例用new Notification.Builder创建。
* 4.用创建一个NotificationManager的notify发送通知
* */
public class MainActivityextends AppCompatActivity implements View.OnClickListener {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notification);
        Button button=findViewById(R.id.btn_notifaction);
        button.setOnClickListener(this);

    }
    @Override
    public void onClick(View view) {
        sendNotification();
    }
    
    @TargetApi(26)
    private void sendNotification() {
        String id="channel_01";
        String name="channel_01";
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel channel=new NotificationChannel(id,name,importance);    //android8.0以后需要channel
        channel.setDescription("hello");// 配置通知渠道的属性
        channel.enableLights(true); // 设置通知出现时的闪灯(如果 android 设备支持的话)
        channel.setLightColor(Color.RED);
        channel.enableVibration(true);  // 设置通知出现时的震动(如果 android 设备支持的话)
        channel.setVibrationPattern(new long[]{100,200,300,400,500,400,300,200,400});

        NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(channel);   //在notificationManager中创建该通知渠道

        Notification notification=new Notification.Builder(this).setContentTitle("标题")
                .setContentText("内容")
                .setSmallIcon(android.R.drawable.stat_notify_more)  //图标
                .setAutoCancel(true)//点击后自动消失
                .setChannelId(id)  //设置channel
                .build();

        notificationManager.notify(1,notification);

    }


}


activity_notification.xml



    

其他的没什么好说的,从方法开始。
@TargetApi:
当你使用一个较高版本才有的api(比工程中的minSdkVersion高)时,编译器会报错,@TargetApi和@RequiresApi可以让代码编译通过。例如我把我minSDK改成22
Android8.0 Notification_第1张图片
那么会报错
Android8.0 Notification_第2张图片
NotificationChannel(id,name,importance)有三个参数,分别为ID,名字,重要度。重要度分为:

  IMPORTANCE_NONE 关闭通知
  IMPORTANCE_MIN 开启通知,不会弹出,但没有提示音,状态栏中无显示
  IMPORTANCE_LOW 开启通知,不会弹出,不发出提示音,状态栏中显示
  IMPORTANCE_DEFAULT 开启通知,不会弹出,发出提示音,状态栏中显示
  IMPORTANCE_HIGH 开启通知,会弹出,发出提示音,状态栏中显示

NotificationManager:
是状态栏通知的管理类,负责发通知、清楚通知等。 NotificationManager是一个系统Service,必须通过getSystemService()方法来获取。
效果展示:
Android8.0 Notification_第3张图片

PendingIntent

PendingIntent 是一种特殊的 Intent, 作用和 Intent 一样是用于启动一个 Activity或者Service,或发送一条 Broadcast。通知响应用户动作便是用这个, 当对通知做出一个动作后,系统便会调用 PendingIntent,启动一个活动,服务或广播,这取决于你获取的是那种 PendingIntent。
在 PendingIntent 中传入的 Context 销毁以后,PendingIntent 依旧有效,它一般使用在当 Context 销毁后需要执行 Intent的地方,一般不是用于立即执行的时候,比如在点击通知后唤醒一个 Activity。。

// 获取用于启动 Activity 
PendingIntent.getActivity(Context context, int requestCode, Intent intent, int flags);
// 获取用于发送 Broadcast
PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags);
// 获取用于启动服务
PendingIntent.getService(Context context, int requestCode, Intent intent, int flags);
PendingIntent.getActivities(Context context, int reqeustCode, Intent[] intents, int flags);
PendingIntent.getForgroundService(Context, int reqeustCode, Intent intent, int flags)
各个参数的用途分别如下

context, 当前上下文
requestCode, 请求标识,如果多次获取时这个值相同,则返回的结果与 flags 参数相关
intent, 请求意图
flags, 控制获取 PendingIntent 的方式,可选值如下
PendingIntent.FLAG_CANCEL_CURRENT,如果当前已存在则取消当前的并返回一个新的 PendingIntent
PendingIntent.FLAG_UPDATE_CURRENT,如果已存在则更新之前的
PendingIntent.FLAG_NO_CREATE,如果已存在则返回当前存在的,否则返回 null
PendingIntent.FLAG_ONE_SHOT,表明这个 PendingIntent 只能用一次,触发一次后自动 cancel
PendingIntent.FLAG_IMMUTABLE,表明这个PendingIntent 不可变

Notification使用PendingIntent跳转
Android8.0 Notification_第4张图片
代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=findViewById(R.id.btn_send);
        button.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.O)
            @Override
            public void onClick(View view) {
                postNotification();
            }
        });
    }
/*
* 发送通知的步骤
* 1.创建一个频道,需要id,name,importance三个参数
* 2.创建一个NotificationManager,然后create上面的频道
* 3.创建一个Notification,中间设置内容标题啥的,一定要setChannelId()。获取Notification实例用new Notification.Builder创建。
* 4.用创建一个NotificationManager的notify发送通知
* */
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void postNotification() {
        String id="channel01";
        String name="频道1";
        int importance= NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel channel=new NotificationChannel(id,name,importance);   //频道
        NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(channel);     //注册频道
        //PendingIntent
        Intent intent=new Intent(MainActivity.this,PendingIntentActivity.class);
        PendingIntent pi=PendingIntent.getActivity(MainActivity.this,0,intent,0);
        Notification notification=new Notification.Builder(this).setContentTitle("通知")   //配置通知
                .setContentText("测试")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setChannelId(id)          //频道
                .setContentIntent(pi)     //PendingIntent
                .build();
        notificationManager.notify(1,notification);
    }
}

你可能感兴趣的:(android入门笔记)