Android(安卓)开发-控件-Notification

Notification

Notification与NotificationManager

创建一个NotificationManager

NotificationManager类是一个通知管理类,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般并不直接实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获取NotificationManager对象,Activity.getSystemService(String)方法可以通过Android系统级服务的句柄,返回对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE即可。

使用Builder构造器来创建Notification对象

使用NotificationCompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都能正常工作。Android8.0新增了通知渠道这个概念,如果没有设置,则通知无法在Android8.0的机器上显示

NotificationChannel

通知渠道:Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定的渠道。

通知重要设置,NotificationManager类中

  1. IMPORTANCE_NONE 关闭通知
  2. IMPORTANCE_MIN 开启通知,不会弹出,但没有提示音,状态栏中无显示
  3. IMPOPTANCE_LOW 开启通知,不会弹出,不发出提示音,状态栏中显示
  4. IMPORTTANCE_DEFAULT 开启通知,不会弹出,发出提示音,状态栏中显示
  5. IMPORTANCE_HIGH 开启通知,会弹出,发出提示音,状态栏中显示

常用方法说明

  1. setContentTitle(String string) 设置标题
  2. setContentText(String string) 设置文本内容
  3. setSmallicon(int icon) 设置小图标
  4. setLargeicon(Bitmap icon) 设置通知的大图标
  5. setColor(int argb) 设置小图标的颜色
  6. setContentIntent(PendingIntent intent) 设置点击通知后的跳转意图
  7. setAutoCancel(boolean boolean) 设置点击通知后自动清除通知
  8. setWhen(long when) 设置通知被创建的时间
package com.example.mynotification;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    private NotificationManager manager;
    private Notification notification;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);


        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            NotificationChannel channel =new NotificationChannel("通知","测试通知",
                    NotificationManager.IMPORTANCE_HIGH);
                    manager.createNotificationChannel(channel);
        }

        Intent intent = new Intent(this,NotificationActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);

        notification =new NotificationCompat.Builder(this,"通知")
                .setContentTitle("官方通知")
                .setContentText("你今天早睡了吗?")
                .setSmallIcon(R.drawable.ic_baseline_access_alarms_24)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.download))
                .setColor(Color.parseColor("#ff0000"))
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)
                .build();       //通知渠道
    }

    public void sendNotification(View view) {
        manager.notify(1,notification);
    }

    public void cacleNotification(View view) {
        manager.cancel(1);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:onClick="sendNotification"
        android:text="发出通知"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:onClick="cacleNotification"
        android:text="关闭通知"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>
package com.example.mynotification;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import androidx.annotation.Nullable;

public class NotificationActivity extends Activity {


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("通知","onCreat:进入NotificationActivity");
    }
}

Android(安卓)开发-控件-Notification

Android(安卓)开发-控件-Notification

上一篇:Android 8.0之后通知栏悬浮栏不显示问题


下一篇:scrapy-redis使用以及剖析