更改通知的LED颜色

我基本上只是尝试Android开发,几天前我遇到了这个名为“ Go SMS Pro ”的应用程序,除其他外,它可以设置不同颜色的通知(蓝色,绿色,橙色,粉红色和浅色)蓝色)。 所以,我已经尝试在我自己的应用程序中自己做这个,但是我不能改变颜色和LED闪烁的内部。 我目前使用此代码:

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 "更改通知的LED颜色"

您可以使用此代码:

 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); } 

您可以使用android.graphics.Color类中的int属性来获取颜色(例如Color.WHITE ),而不是使用ARGB值作为示例节目。

你尝试过:.setLights(Color.BLUE,500,500)?

也可以在S3,N5,N4,Nexus上正常使用..

Leds是Android手机中非常标准的function。 如果您依赖它们,您将错过很多用户群(例如,考虑一下甚至没有LED的SGS手机)。

也就是说,id int字段ledARGB没用,你可能需要从该APK调查一些JNI调用。 我的猜测是它会有不同的方法,具体取决于运行的设备。

尝试使用hex颜色,包含一个alpha值并将默认值设置为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. 

我假设您的硬件具有所有颜色,但可能没有。

FLAG_SHOW_LIGHTSNotification.Builder.setLights(int,int,int); 自Android O(API级别26)以来不推荐使用如果您打算在API级别26或更高版本中使用此function,请查看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); 

但是在这个新的实现中你可能无法控制LED毫秒LED关闭毫秒 ,它将取决于硬件。

对LED颜色的支持非常参差不齐。 尝试拔下USB电缆,确保没有其他应用程序同时尝试修改LED。 也关闭屏幕。

看看下面的来源。

 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)); 

我在下面尝试了我的代码,光线对我来说很好。 我的手机是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”设置。