Nano Hash - криптовалюты, майнинг, программирование

Дополнительные функции всегда имеют значение null

Я использую FCM для push-уведомлений и отправляю данные из уведомления в действие, которое я открываю.

Код для уведомления о строительстве:

private void handleNotification(RemoteMessage remoteMessage) {
    String notTitle = remoteMessage.getNotification().getTitle();
    String notBody = remoteMessage.getNotification().getBody();

    Intent resultIntent = new Intent(this, HomeActivity.class);
    resultIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    resultIntent.putExtra("pushNotClick", "yes");
    resultIntent.putExtra("pushNotHead", ""+notTitle);

    PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setSmallIcon(R.drawable.fb_icon);
    mBuilder.setColor(getResources().getColor(R.color.colorPrimary));
    mBuilder.setContentTitle(notBody)
            .setContentText(notTitle)
            .setAutoCancel(true)
            .setContentIntent(resultPendingIntent);
    NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
        notificationChannel.enableLights(true);
        assert mNotificationManager != null;
        mBuilder.setSmallIcon(R.mipmap.icon_not);
        mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
        mNotificationManager.createNotificationChannel(notificationChannel);
    }
    assert mNotificationManager != null;
    mNotificationManager.notify((int) System.currentTimeMillis() /* Request Code */, mBuilder.build());
}

И я получаю такие дополнительные намерения в своей деятельности:

String notState = getIntent().getStringExtra("pushNotClick");
String notHead = getIntent().getStringExtra("pushNotHead");

Но проблема в том, что каждый раз, когда Intent Extras в Activity равны нулю, я проверил все возможные причины, которые я нашел здесь, в сообществе, но каждый раз ответ один и тот же.

Я пробовал указанные ниже ссылки

Дополнительное намерение всегда равно нулю

Android Notification PendingIntent Extras null

Всегда получать нулевые данные из намерения уведомления Android

Я не уверен, где я делаю не так.


Ответы:


1

Я даже после долгой отладки и всего прочего не смог найти причину проблемы. Наконец, я изменил способ отправки дополнений Intent к действию. Теперь я использую пакет для отправки данных, и он работает как шарм. Это обходной путь, а не ответ на вопрос, поэтому я не буду принимать его как принятый ответ.

19.07.2019

2

Вы пробовали проверять поле данных RemoteMessage? Что-то вроде этого:

// Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());

        if (/* Check if data needs to be processed by long running job */ true) {
            // For long-running tasks (10 seconds or more) use WorkManager.
            scheduleJob();
        } else {
            // Handle message within 10 seconds
            handleNow();
        }

    }
18.07.2019
  • Да, данные поступают в RemoteMessage. Не так, но данные поступают в это поле. 19.07.2019

  • 3

    Вы проверяете onCreate? Если да, проверьте onNewIntent.

    18.07.2019
  • как это помогает? 18.07.2019
  • Фактически, это может помочь, если действие уже выполняется, намерение должно быть проверено в onNewIntent. В любом случае он должен подробно описать ответ. 18.07.2019
  • Переопределите метод действия onNewIntent. Здесь вы получаете объект намерения, который вы можете получить отдельно. 18.07.2019
  • А что делать, если активность не запущена? Например, облачное сообщение передается в панель уведомлений, когда приложение закрыто? 18.07.2019
  • Согласно вашему коду, действие будет запущено после нажатия на уведомление и запуска жизненного цикла действия. Вот как работает PendingIntent. 18.07.2019

  • 4

    Если notTitle является целым числом, отправьте его с таким намерением

     resultIntent.putExtra("pushNotHead", notTitle.toString);
    
    18.07.2019
  • 1) Это недействительный код. 2) как это должно помочь? 18.07.2019
  • Иногда я сталкиваюсь с проблемой, когда конвертирую в String + notTitle. Просто попробуйте один раз. 18.07.2019
  • I face problem sometime с какой проблемой вы столкнулись, и ""+someInt и someInt.toString() приведут к одному и тому же результату. 18.07.2019
  • Иногда данные отправляются как целые числа, но мы сделали код getString на принимающей стороне. 18.07.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..