Изменение цвета светодиода для уведомлений

Я просто экспериментирую с разработкой Android, и пару дней назад я встретил это приложение под названием « Go SMS Pro », которое, помимо прочего, может настраивать уведомления разных цветов (синий, зеленый, оранжевый, розовый и светлый синий). Итак, я попытался сделать это сам в своем собственном приложении, однако я не могу изменить нийер цвет или мигание внутреннего светодиода. В настоящее время я использую этот код:

public class MainActivity extends Activity { static final int NOTIFICATION_ID = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(buttonOnClick); } public OnClickListener buttonOnClick = new OnClickListener() { @Override public void onClick(View v) { String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); Notification notification = new Notification(R.drawable.icon, "Hello", System.currentTimeMillis()); notification.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL; notification.ledARGB = Color.BLUE; notification.ledOnMS = 1000; notification.ledOffMS = 300; Context context = getApplicationContext(); CharSequence contentTitle = "My notification"; CharSequence contentText = "Hello World!"; Intent notificationIntent = new Intent(MainActivity.this, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); mNotificationManager.notify(NOTIFICATION_ID, notification); } }; } 

Но, как я уже сказал, это не работает так, как я хочу; Вместо этого он просто мигает зеленым цветом с задержкой по умолчанию, а не той, которую я установил в своем коде.

Может ли кто-нибудь увидеть, что не так с моим кодом, или знать, нужно ли мне что-то сделать для этого?

Solutions Collecting From Web of "Изменение цвета светодиода для уведомлений"

Вы можете использовать этот код:

 private static final int LED_NOTIFICATION_ID= 0; //arbitrary constant private void RedFlashLight() { NotificationManager nm = (NotificationManager) getSystemService( NOTIFICATION_SERVICE); Notification notif = new Notification(); notif.ledARGB = 0xFFff0000; notif.flags = Notification.FLAG_SHOW_LIGHTS; notif.ledOnMS = 100; notif.ledOffMS = 100; nm.notify(LED_NOTIFICATION_ID, notif); } 

Вместо использования значения ARGB в качестве примера show вы можете использовать свойство int внутри класса android.graphics.Color чтобы получить цвет (например, Color.WHITE )

Вы пытались: .setLights (Color.BLUE, 500, 500)?

Работает нормально на S3, N5, N4, Nexus тоже.

Leds – довольно нестандартная функция в телефонах Android. Если вы зависнете в них, вы пропустите хороший кусок базы пользователей (подумайте, например, о телефонах SGS, в которых даже нет светодиодов).

Тем не менее, id int field ledARGB не был полезен, вам, возможно, придется заглянуть в какой-то вызов JNI из этого APK. Я предполагаю, что он будет иметь разные методы в зависимости от используемого устройства.

Попробуйте использовать шестнадцатеричный цвет, включите альфа-значение и установите значения по умолчанию равными 0:

 notification.defaults = 0; notification.ledARGB = 0xff0000ff; 

Кроме того, интерфейс уведомления говорит следующее:

 public int ledARGB Since: API Level 1 The color of the led. The hardware will do its best approximation. 

Я предполагаю, что ваше оборудование имеет все цвета, но это может и не быть.

Посмотрите источник ниже.

 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx) .setPriority(Notification.PRIORITY_HIGH) .setSmallIcon(getNotificationIcon()) .setColor(0xff493C7C) .setContentTitle(ctx.getString(R.string.app_name)) .setContentText(msg) .setDefaults(Notification.DEFAULT_SOUND) .setLights(0xff493C7C, 1000, 1000) .setStyle(new NotificationCompat.BigTextStyle().bigText(styledMsg)); 

FLAG_SHOW_LIGHTS и Notification.Builder.setLights (int, int, int); Устарели от Android O (уровень API 26). Если вы планируете использовать эту функцию в API уровня 26 или выше, посмотрите на NotificationChannel

Пример :

 NotificationChannel mChannel = new NotificationChannel(id, name, importance); ..... ..... mChannel.enableLights(true); // Sets the notification light color for notifications posted to this // channel, if the device supports this feature. mChannel.setLightColor(Color.RED); 

Но в этой новой реализации вы можете не контролировать светодиод на миллисекундах и светодиодах за миллисекунды, это будет зависеть от аппаратного обеспечения.

Поддержка цветов светодиодов действительно пятнистая. Попробуйте отключить USB-кабель и убедитесь, что ни одно другое приложение не пытается изменить светодиод одновременно. Также выключите экран.

Я попробовал свой код ниже, и свет отлично работает для меня. Мой мобильный телефон Nexus 6P:

 mBuilder.setContentTitle("APP_NAME") .setContentText(msg) .setContentIntent(PendingIntent.getActivity(mCtxt, UUID.randomUUID().hashCode(), new Intent(mCtxt, ReceivePushActivity.class), Notification.FLAG_AUTO_CANCEL)) .setWhen(System.currentTimeMillis()) .setPriority(Notification.PRIORITY_DEFAULT) .setAutoCancel(true) //.setDefaults(Notification.DEFAULT_ALL) .setVibrate(new long[] {0, 1000, 200,1000 }) .setLights(Color.MAGENTA, 500, 500) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setSmallIcon(R.mipmap.notify_logo); Notification ntf = mBuilder.build(); // ntf.flags = Notification.DEFAULT_ALL; // ntf.flags = Notification.FLAG_ONLY_ALERT_ONCE; // ntf.flags = Notification.FLAG_AUTO_CANCEL; mNotificationManager.notify(notifyId, ntf); 

Смысл, удалите настройки «DEFAULT_ALL».