Вибрация не прекращается после отмены - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь настроить оповещение, которое сохраняется в течение 30 секунд и вибрирует во время отображения. Однако при отмене или разрешении таймаута уведомления вибрация не останавливает вибрацию на некоторых устройствах.

Не работает на Pixel 3 под управлением Android 9. Он работает с использованием OnePlus 6 под управлением Android 9 или Pixel под управлением Android 10 Beta.

Я пытался использовать тот же контекст для создания 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();

Я ожидаю, что телефон должен перестать вибрировать, когда уведомление скрыто. Но вибрация продолжается, даже если уведомление скрыто при вызове отмены.

1 Ответ

0 голосов
/ 11 июня 2019

Глядя на код, написанный самим гуглом, конфигурация канала и уведомления несколько отличались:

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

Удаление строки:

incCall.flags = Notification.FLAG_INSISTENT

вызвановибрации, чтобы остановить, когда уведомление было скрыто.Тем не менее, он перестал работать на других моделях, таких как Pixel под управлением Android 10 Beta.Из-за этого я полностью адаптировался к решению, используемому в ссылке.Уведомление было построено следующим образом:

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

Это решило проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...