Канал уведомлений - возможно ли изменить LightColor после его установки? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь изменить setLightColor цветом, возвращаемым из интерфейса JavaScript.К сожалению, NotificationCompat.Builder(context, CHANNEL_ID).setLights не имеет абсолютно никакого влияния на API> = 26, поэтому я не могу использовать Intent.putExtra или что-то подобное.

Возможно ли даже изменить его после того, как оно уже установлено?Я хотел бы, чтобы это было динамичным.

РЕДАКТИРОВАТЬ Кажется, есть некоторое неправильное представление о том, что я хочу.Я не хочу трогать Broadcast Reciever.Работает просто отлично.Я хочу изменить канал уведомлений.Он не обновляется setLightColor(Color.___).

In protected void onCreate

String jobColor = someColor; // Will be filled in by other code - different colour every time
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    CharSequence name = "Channel_Name";
    String description = "Channel_Description";
    int importance = NotificationManager.IMPORTANCE_HIGH;
    NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
    channel.setDescription(description);
    channel.enableLights(true);
    channel.setLightColor(Color.parseColor(jobColor)); // Dynamically set from above
    channel.enableVibration(true);
    NotificationManager notificationManager = getSystemService(NotificationManager.class);
    notificationManager.createNotificationChannel(channel);
}

My BroadcastReciever - setLight не применим для API 26 или выше, я считаю

public class AlarmReceiver extends BroadcastReceiver {
private final String CHANNEL_ID = "some_channel";
@Override
public void onReceive(Context context, Intent intent) {
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0 , new Intent(context, MainPage.class), 0);
    String jobColor = intent.getStringExtra("jobColor");

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setPriority(NotificationCompat.PRIORITY_MAX)
            .setSmallIcon(R.drawable.ic_stat_name)
            .setContentTitle("Upcoming Shift!")
            .setContentText("Shift at " + intent.getStringExtra("jobName") + " on " + intent.getStringExtra("jobDate") + " at " + intent.getStringExtra("jobTime"))
            .setStyle(new NotificationCompat.BigTextStyle().bigText("You have a shift at " + intent.getStringExtra("jobName") + " on " + intent.getStringExtra("jobDate") + " at " + intent.getStringExtra("jobTime")))
            .setLights(Color.parseColor(jobColor), 10000, 1000)
            .setContentIntent(pendingIntent)
            .setAutoCancel(true);
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
    notificationManager.notify(12345, mBuilder.build());
}
}

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вы не можете программно изменить цветовое уведомление канала, важность и т. Д., Не удаляя канал.

Поскольку пользователь, возможно, изменил светлый цвет вручную.

Чтобы достичь этого программно, нужно получитьканал и создать новый канал с новым идентификатором.удалить старый канал. Ваши изменения не будут отражены, если создать канал с предыдущим идентификатором

для проверки ссылок. Приложение WhatsApp попытается изменить мелодию звонка из приложения и увидеть канал в левом нижнем углу.удаленное сообщение

Источник Android Doc

0 голосов
/ 13 ноября 2018

Из createNotificationChannel () описание:

Это также можно использовать для восстановления удаленного канала и обновления существующего канала. * имя, описание, группа и / или важность.

Так что вы можете попробовать это:

  NotificationManager notificationManager = getSystemService(NotificationManager.class);
            //find created channel
            NotificationChannel channel = notificationManager.getNotificationChannel("id");
            if (channel != null){
                //set new color
                channel.setLightColor(0);
                //update channel
                notificationManager.createNotificationChannel(channel);
            }
...