我正在尝试在我的应用中为Notificaitons设置自定义声音,振动和LED颜色 - 但它不起作用。设置标题,图标,颜色等所有其他工作正常。我在Stackoverflow中尝试了很多解决方案,但它们也没有用,所以我问了一个问题。
这是我的通知代码 -
Intent resultIntent = new Intent(this, ActivityB.class);
Bundle b = new Bundle();
//Some bundle related Code
resultIntent.putExtra("bundle",b);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntent(new Intent(this, ActivityA.class));
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
android.support.v7.app.NotificationCompat.Builder builder = new android.support.v7.app.NotificationCompat.Builder(this);
builder.setSmallIcon(R.drawable.ic_small_logo);
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_logo_large));
builder.setContentTitle(notification.getTitle());
builder.setContentText(notification.getBody());
builder.setColor(Color.parseColor("#FFFFFF"));
builder.setStyle(new NotificationCompat.BigTextStyle());
builder.setVibrate(new long[] { 1000, 100, 1000, 100, 1000 });
builder.setLights(Color.YELLOW, 3000, 3000);
builder.setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notif1));
builder.setAutoCancel(true);
builder.setContentIntent(resultPendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(1, builder.build());
我也加入了振动许可。在运行Lollipop和Marshmallow的2部手机上进行了测试。
修改1:
共享我的应用程序使用的所有权限 -
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE"/>
编辑2 :适用于Marshmallow版手机。不适用于带棒棒糖的手机。
编辑3:也适用于Nougat(一加3T手机)。
答案 0 :(得分:5)
根据您的评论,您的手机本身似乎有问题。我在(1)中询问了振动,因为你设置{ 1000, 100, 1000, 100, 1000 }
这是一个1000毫秒的延迟,然后是100毫秒的振动。这可能太少,无法检测。
无论如何,我在某些设备上遇到同样的振动问题,所以我直接使用了振动器服务。发出通知后,我所做的就是这样。根据你的评论,我还添加了铃声管理器部分。
// built the notification without vibration and sound
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(1, builder.build());
// start vibrator manually
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(new long[] {1000, 100, 1000, 100, 1000}, Constants.VIBRATION_ONCE);
// start sound manually
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notif1);
Ringtone ringtone = RingtoneManager.getRingtone(this, uri);
ringtone.play();
这似乎适用于大多数设备。至于通知的亮点,已经在Official Document中说明了
设置设备上指示灯LED的所需颜色,以及闪烁占空比(以毫秒为单位)。并非所有设备都会尊重所有(甚至任何)这些值。
如果您使用的是Mi设备,请尝试“信任”该应用并启用通知所需的所有权限,包括“自动启动”。它在大多数情况下都有效。
答案 1 :(得分:0)
声音不起作用的原因之一是因为它无法从builder.setSound(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notif1));
找到文件更改
到
String uriSound = String.format(“android.resource://%s / raw /%s”,getPackageName(),R.raw.notif1);
builder.setSound(uriSound);
对于灯光使用RGB组合。 builder.setLights(Color.rgb(130, 130, 130));
将振动模式更改为更均匀的方式,
builder.setVibrate(new long[] { 50, 100, 150, 200, 250});