Я использую startForeground
, чтобы сделать мой сервис постоянным. Таким образом, я должен создать уведомление, чтобы передать его функции startForeground
.
Я хочу запустить службу переднего плана, не позволяя уведомлению сделать предупреждение (т. Е. С вибрацией или звуком).
Для устройств Android 8 я создаю канал уведомлений перед вызовом startForeground
. Я установил значение NotificationManager.IMPORTANCE_NONE
, чтобы избежать уведомлений (просто чтобы значок отображался в строке состояния).
Однако на некоторых устройствах у меня все еще есть уведомление (для Samsung Galaxy S8 и Honor View 10).
Итак, я проверил этот одобренный ответ https://stackoverflow.com/a/24008765/10069542.
Это работало нормально для Samsung Galaxy S8. Тем не менее, Honor View 10 по-прежнему выдает предупреждение, когда я запускаю службу переднего плана.
Вот код для создания моего канала уведомлений и создания уведомления для передачи на startForeground
Канал уведомлений
@RequiresApi(api = Build.VERSION_CODES.O)
private String createNotificationChannel() {
String channelId = NOTIFICATION_CHANNEL_ID;
String channelName = "My Background Service";
NotificationChannel chan = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_NONE);
chan.setLightColor(Color.BLUE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
NotificationManager service = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (service != null) {
service.createNotificationChannel(chan);
} else {
Log.e(TAG, "Error creating notification channel");
return null;
}
return channelId;
}
Уведомление
private Notification getNotification() {
Intent startIntent = new Intent(getApplicationContext(), RangoActivity.class);
startIntent.setAction(Intent.ACTION_MAIN);
startIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(
this, REQ_CODE_REQUEST_RANGO_SERVICE, startIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification.Builder builder;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID);
} else {
builder = new Notification.Builder(this);
}
builder.setSmallIcon(R.drawable.rango_notification_icon)
.setContentTitle(getString(R.string.notification_content_title))
.setContentText(getString(R.string.notification_content_text))
.setTicker(getString(R.string.notification_ticker))
.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)
.setVibrate(new long[]{0L})
.setWhen(System.currentTimeMillis())
.setOngoing(true)
.setAutoCancel(true)
.setContentIntent(contentIntent);
Notification notification = builder.build();
return notification;
}