Android——通知(Notification)
发布日期:2021-05-25 13:00:37 浏览次数:21 分类:精选文章

本文共 3596 字,大约阅读时间需要 11 分钟。

Android 8.0(即Oreo)向上版本在通知处理上与之前版本存在明显差异,主要体现在需要使用新的 NotificationChannel 模型。此外,当应用目标版本为 Android Oreo 或更高时,发送通知前必须先检查系统版本,确保已添加相应的渠道。以下是与此相关的实现步骤和注意事项。

MainActivity.java 中,onClickListener 内的逻辑如下:

public class MainActivity extends AppCompatActivity {    private Button GetNotification;    private static final int ID = 1;    private static final String CHANNEL_ID = "1";    private static final String CHANNEL_NAME = "channel1";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        GetNotification = (Button) findViewById(R.id.GetNotification);        GetNotification.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {                    // Android 8.0 及以上版本需要创建通知渠道                    NotificationChannel channel = new NotificationChannel(                            CHANNEL_ID,                            CHANNEL_NAME,                            NotificationManager.IMPORTANCE_HIGH                    );                    manager.createNotificationChannel(channel);                                        Intent intent = new Intent(MainActivity.this, NotificationActivity.class);                    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);                    NotificationCompat.Builder builder = new NotificationCompat.Builder(                            MainActivity.this,                            CHANNEL_ID                    )                            .setContentTitle("Title")                            .setContentText("ContentText")                            .setWhen(System.currentTimeMillis())                            .setContentIntent(pendingIntent)                            .setSmallIcon(R.drawable.smile)                            .setAutoCancel(true)                            .setVibrate(new long[]{0, 1000, 1000, 1000})                            .setLights(Color.BLUE, 1000, 1000)                            .setPriority(NotificationCompat.PRIORITY_MAX)                            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.smile))                            .build();                                        manager.notify(ID, builder.build());                } else {                    // Android 7.0 及以下版本直接发送通知                    Notification notification = new NotificationCompat.Builder(MainActivity.this)                            .setContentTitle("Title")                            .setContentText("ContentText")                            .setWhen(System.currentTimeMillis())                            .setSmallIcon(R.drawable.smile)                            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.smile))                            .build();                                        manager.notify(ID, notification);                }            }        });    }}

相应的资源布局文件 activity_main.xml 类似于:

同时,在清单文件中添加必要权限:

关键点说明:

  • 版本判定:通过 Build.VERSION.SDK_INT 判断当前系统版本,确保在 Android Oreo 及以上时创建 NotificationChannel,否则直接发送普通通知。
  • 渠道创建:在 Android Oreo 及以上版本中,必须先创建通知渠道,否则会抛出错误。
  • 通知优化:通过设置不同的重要等级(如 setPrioritysetImportance)实现不同效果,以提升用户体验。
  • 资源管理:点击通知后设置 setAutoCancel(true),确保一个通知只显示一次。
  • 媒体效果:使用振动和灯光效果增强通知感知,同时设置小图标和大图标以满足不同屏幕尺寸需求。
  • 通过这些实现可以在不同 Android 版本上兼容地完成通知功能,同时兼顾用户体验和系统资源管理。

    上一篇:Android——Activity的生命周期
    下一篇:Android——GSON解析JSON

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年05月09日 18时21分07秒