取消后振动不会停止

时间:2019-06-11 06:50:32

标签: android notifications

我正在尝试设置一个抬头通知,该通知会持续30秒并在显示时发生振动。但是,取消或让通知超时时,振动并不能阻止某些设备上的振动。

它不适用于运行Android 9的Pixel 3。 它可以在运行Android 9的OnePlus 6或运行Android 10 Beta的Pixel上使用。

在启动和取消尝试时,我尝试使用相同的上下文来生成NotificationManagerCompat。 我尝试取消与我的应用程序相关的所有通知,而不是取消我实际上要取消的通知。 我尝试启动广播并启动接收器,这又取消了通知。

这是我正在使用的通知渠道:

AudioAttributes audioAttr =
            new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
                .build();

NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
      if (notificationManager != null) {
        NotificationChannel channel = new NotificationChannel("channelId",
            "channelName",
            NotificationManager.IMPORTANCE_HIGH);
     channel.setDescription("Channel description");
        channel.setVibrationPattern({0L, 2000L, 2000L});
channel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), audioAttr);
        channel.enableVibration(true);
        channel.setLockscreenVisibility(VISIBILITY_PUBLIC);
        channel.setShowBadge(false);
        notificationManager.createNotificationChannel(ch);

这是启动的通知:


      Notification incCall = new NotificationCompat.Builder(context,
          "someChannelId").setSmallIcon(R.drawable.someDrawable)
          .setContentText("Some text")
          .setContentTitle("Some title")
          .setPriority(NotificationCompat.PRIORITY_HIGH)
          .setCategory(NotificationCompat.CATEGORY_CALL)
          .setDefaults(Notification.DEFAULT_ALL)
          .setAutoCancel(true)
          .setFullScreenIntent(intent, true)
          .setTimeoutAfter(30 * 1000)
          .build();

      incCall.flags = Notification.FLAG_INSISTENT;

 NotificationManagerCompat.from(context)
          .notify(”some id”, incCall);

这是我尝试取消通知的方式:


      NotificationManagerCompat.from(context).cancel("someChannelId");

我也尝试过:

      NotificationManagerCompat.from(context).cancelAll();

我希望手机在隐藏通知后会停止振动。但是,即使在调用cancel时通知被隐藏,振动仍会继续。

1 个答案:

答案 0 :(得分:0)

看看Google自己编写的代码,频道和通知的配置有些不同:

http://androidxref.com/8.1.0_r33/xref/packages/services/Telecomm/src/com/android/server/telecom/ui/IncomingCallNotifier.java

删除行:

incCall.flags = Notification.FLAG_INSISTENT

导致隐藏通知时振动停止。但是,它的确使它停止在其他型号上运行,例如运行Android 10 Beta的Pixel。因此,我完全适应了链接中使用的解决方案。通知的构建如下:

 Notification incCall = new NotificationCompat.Builder(context,
      "id")
      .setPriority(NotificationCompat.PRIORITY_MAX)
      .setCategory(NotificationCompat.CATEGORY_CALL)
      .setSmallIcon(R.drawable.someDrawable)
      .setContentTitle("title")
      .setContentText("content")
      .setAutoCancel(true)
      .setOngoing(true)
      .setTimeoutAfter(30*1000)
      .setFullScreenIntent(intent, true)
      .build();

此通知渠道的构建方式如下:

    NotificationChannel channel = new NotificationChannel("id",
        "name",
        NotificationManager.IMPORTANCE_HIGH);
    channel.setDescription("Description");
    AudioAttributes audioAttributes =
        new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
            .build();
    channel.setSound(aRingtoneUri, audioAttributes);
    channel.setLockscreenVisibility(VISIBILITY_PUBLIC);
    channel.setShowBadge(false);
    channel.enableVibration(true);
    notificationManager.createNotificationChannel(channel);

这为我解决了这个问题。