柚子快報(bào)激活碼778899分享:Android 通知欄使用總結(jié)
柚子快報(bào)激活碼778899分享:Android 通知欄使用總結(jié)
使用Android 通知欄時(shí)遇到不少問(wèn)題:
第一個(gè)問(wèn)題:
android.app.RemoteServiceException$ForegroundServiceDidNotStartInTimeException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{4e07b77 u0 com.one.browser/.service.DownloadService}
解決辦法:
/**
* 通知構(gòu)造器發(fā)送通知
*/
private void notifyNow() {
builder = new NotificationCompat.Builder(DownloadService.this, "download")
// 設(shè)置通知的標(biāo)題
.setContentTitle("軟件更新中...")
// 設(shè)置通知的圖標(biāo)
.setSmallIcon(android.R.drawable.stat_sys_download)
// 設(shè)置通知的優(yōu)先級(jí)
// 通知的優(yōu)先級(jí)只在 Android 7.1(API 級(jí)別 25)及更低版本中起作用。在 Android 8.0(API 級(jí)別 26)及更高版本中,
// 通知的優(yōu)先級(jí)由通知渠道的重要性屬性決定。因此,在 Android 8.0 及以上版本中,設(shè)置通知渠道的重要性屬性(使用 setImportance() 方法)是更有效和推薦的做法。
.setPriority(NotificationCompat.PRIORITY_HIGH)
// 設(shè)置通知在用戶點(diǎn)擊后自動(dòng)取消
.setAutoCancel(false)
// 設(shè)置下載進(jìn)度條
.setProgress(100, 0, false)
// 設(shè)置為自動(dòng)取消
.setAutoCancel(true);
// 1、發(fā)送通知(一定要按照順序)
notificationManagerCompat.notify(1, builder.build());
// 2、將服務(wù)設(shè)置為前臺(tái)服務(wù)(一定要按照順序)
startForeground(1, builder.build());
}
注意:解決這個(gè)問(wèn)題的辦法是添加?startForeground 這個(gè)函數(shù)
第二個(gè)問(wèn)題:
當(dāng)我在實(shí)現(xiàn)一個(gè)通知欄下載提示通知時(shí),下載任務(wù)已經(jīng)開(kāi)始了但是通知欄要過(guò)5、6秒之后才有顯示通知。
解決辦法:
這個(gè)問(wèn)題就是要按照第一個(gè)問(wèn)題中的代碼按照順序執(zhí)行就可以了
// 1、發(fā)送通知(一定要按照順序)
notificationManagerCompat.notify(1, builder.build());
// 2、將服務(wù)設(shè)置為前臺(tái)服務(wù)(一定要按照順序)
startForeground(1, builder.build());
第三個(gè)問(wèn)題:
關(guān)于 通知欄實(shí)現(xiàn)所要用到的API問(wèn)題
(1)NotificationManagerCompat (Android4版本以下通知管理器,也可以在4版本以上使用)
(2)NotificationCompat.Builder(通知構(gòu)建器,所有Android版本都可以使用)
(3)NotificationChannel(Android8版本以上通知分組器)
(4)NotificationManager(Android4版本以上通知管理器)
AI的說(shuō)法是這樣的:
NotificationManagerCompat?是用于支持 Android 4 及更高版本的通知操作的向后兼容的通知管理類(lèi)。NotificationCompat.Builder?是一個(gè)輔助類(lèi),用于在所有 Android 版本上構(gòu)建通知。NotificationChannel?是用于在 Android 8 及更高版本中創(chuàng)建通知渠道的類(lèi),并將通知分組。NotificationManager?是原生的通知管理類(lèi),適用于 Android 4 及更高版本,用于創(chuàng)建、顯示、更新和取消通知。
這個(gè)具體我也搞不太懂官方搞這么多搭配使用干啥,具體的使用方法:
這個(gè)是Android 8以上的使用方法?NotificationManager??
// 創(chuàng)建 NotificationManager 對(duì)象
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 創(chuàng)建通知渠道(僅適用于 Android 8.0 及更高版本)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String channelId = "channel_id";
CharSequence channelName = "Channel Name";
String channelDescription = "Channel Description";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, importance);
notificationChannel.setDescription(channelDescription);
// 設(shè)置其他通知渠道屬性
// ...
// 將通知渠道添加到 NotificationManager
notificationManager.createNotificationChannel(notificationChannel);
}
// 創(chuàng)建通知
int notificationId = 1;
String channelId = "ID";
CharSequence title = "標(biāo)題";
CharSequence content = "內(nèi)容";
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(title)
.setContentText(content)
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
// 設(shè)置其他通知屬性
// ...
// 顯示通知
// 1、發(fā)送通知(一定要按照順序)
notificationManager.notify(1, builder.build());
// 2、將服務(wù)設(shè)置為前臺(tái)服務(wù)(一定要按照順序)
startForeground(1, builder.build());
Android 8以下的使用方法要將?NotificationManager??替換為 NotificationManagerCompat?就可以使用了。
第四個(gè)問(wèn)題:
通知欄的優(yōu)先級(jí) 就是?setPriority 在Android 8以上版本中好像不起作用了,被?NotificationChannel 給替代了,需要在觀察一下。
NotificationChannel channel = new NotificationChannel("download", "下載", NotificationManager.IMPORTANCE_DEFAULT);
柚子快報(bào)激活碼778899分享:Android 通知欄使用總結(jié)
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。