NotificationCompat / Notification
NotificationCompat
和 Notification
是 Android 框架提供的两个不同的通知类。
NotificationCompat
是兼容库(Support Library)中提供的类,用于在各个 Android 版本上一致地创建和管理通知。它提供了向后兼容的特性,使你能够在较旧的 Android 版本上使用较新的通知功能。NotificationCompat
具有更广泛的兼容性,可以覆盖大多数 Android 设备。
Notification
是 Android 系统原生的通知类,从 Android 3.0(API 级别 11)开始引入。与 NotificationCompat
相比,Notification
类可能包含一些在较旧的 Android 版本上不可用的功能。但在运行较新 Android 版本的设备上,Notification
可以提供更多的自定义选项和特定功能。
为什么同时存在这两个类呢?一个主要原因是为了向后兼容性。通过使用 NotificationCompat
,你可以在较旧的 Android 版本上使用通知功能,并确保应用在不同版本的设备上都能正常工作。另外,即使 NotificationCompat
提供了许多功能,有时你可能仍然需要使用 Notification
类来利用特定的平台功能或进行更高级的定制。
总之,NotificationCompat
和 Notification
都可以用于创建和管理通知,选择使用哪个取决于你的需求和目标设备的兼容性要求。如果你只针对较新的 Android 版本开发应用,可以优先考虑使用 Notification
类。如果你需要更广泛的兼容性,则可以选择使用 NotificationCompat
类。
网上的教程真是稀巴烂,一个很简单的例子都搞得非常复杂。NotificationCompat我没有成功,直接用Notification
@RequiresApi(api = Build.VERSION_CODES.O) public void notifyTest() { String channel = "12132"; RemoteViews notifity = new RemoteViews(getPackageName(), R.layout.notify); // 布局文件 Notification.Builder builder = new Notification.Builder(this, channel); builder.setOngoing(true) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.ic_launcher) .setCustomContentView(notifity) ; NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); NotificationChannel notificationChannel = new NotificationChannel(channel, "Default Channel", NotificationManager.IMPORTANCE_DEFAULT); notificationManager.createNotificationChannel(notificationChannel); notificationManager.notify(1, builder.build()); }
- notify.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="horizontal"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="pause"> </Button> <Button android:id="@+id/report" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="report"> </Button> </LinearLayout> </LinearLayout>
- 权限
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />