Intereting Posts
Как программно закрыть Android Soft KeyBoard? Как изменить динамическую работу запуска? Использование атрибутов уровня API за пределами minSdkVersion Просмотр списка Android Перетаскивание Android: медленная сеть во время телефонных звонков Android Studio – с Junit 4.12 "!!! Ожидается, что версия JUnit версии 3.8 или более поздней версии: Android WebView неправильно обрабатывает символы новой строки в предварительно отформатированном тексте Изображение панели инструментов с центром Регистрация SMS, как в мобильном приложении: whatsapp Используйте alarmManager и службу для выполнения уведомления о расписании только в течение определенного периода времени Когда вызывать контекст активности или контекст приложения? Базы данных SQLiteConnection протекают при запуске эмулятора ObjectAnimator со свойством scale делает bg black? Как предотвратить изменение размера EditText при вводе пользователем? Просмотр файлов с Google Android

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

Я просто экспериментирую с разработкой 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».