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" />