通知声音,振动和LED不起作用

时间:2017-04-09 11:17:31

标签: android push-notification notifications

我正在尝试在我的应用中为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手机)。

2 个答案:

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