我基本上只是在试验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);
}
};
}
但正如我所说,它不按我想要的方式运作;相反,它只是以常规绿色闪烁,默认延迟,而不是我在代码中设置的那个。
任何人都可以看到我的代码出了什么问题,或者知道我是否还要做其他事情来实现这个目标?
答案 0 :(得分:12)
您可以使用此代码:
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值作为示例节目,您还可以使用android.graphics.Color
类中的int属性来获取颜色(例如Color.WHITE
)
答案 1 :(得分:11)
您尝试过:.setLights(Color.BLUE,500,500)?
在S3,N5,N4,Nexus上工作正常......
答案 2 :(得分:10)
Leds是Android手机中非常标准的功能。如果您依赖它们,您将错过很大一部分用户群(例如,考虑一下甚至没有LED的SGS手机)。
那就是说,id字段ledARGB没用,你可能需要从那个APK中查看一些JNI调用。我猜测它会有不同的方法,具体取决于运行的设备。
答案 3 :(得分:4)
FLAG_SHOW_LIGHTS和Notification.Builder.setLights(int,int,int);已被弃用如果您计划在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);
但是在这个新的实现中你可能无法控制LED on milli-seconds& LED off milli-seconds它将取决于硬件。
答案 4 :(得分:2)
尝试使用十六进制颜色,包含一个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.
我假设您的硬件具有所有颜色,但可能没有。
答案 5 :(得分:2)
请查看以下来源。
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));
答案 6 :(得分:1)
支持LED颜色非常参差不齐。尝试拔下USB电缆并确保没有其他应用程序同时尝试修改LED。也关闭屏幕。
答案 7 :(得分:1)
我在下面尝试了我的代码,光线对我来说很好。我的手机是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'设置。