Как удалить класс из намерения kotlin

#android #class #kotlin #android-intent #compilation

#Android #класс #kotlin #android-намерение #Сборник

Вопрос:

У меня есть BroadcastReciever, который я зарегистрировал в activity. Я хочу изменить существующее намерение, чтобы начать с ним действия, но я не понимаю, как я могу удалить класс из своего намерения. Когда я пытаюсь выполнить intent.setClass(ApplicationContext,null), я получаю ошибку компиляции: Null не может быть значением класса ненулевого типа. Но как удалить класс из существующего намерения? Мне очень интересно, какой класс intent имеет, когда мы создаем его, используя стандартные конструкторы intent? Спасибо всем за любую помощь.

Ответ №1:

setClass это удобная функция для поиска компонента и вызова setComponent . Таким образом, вы можете вызвать setComponent(null) , чтобы очистить компонент. Намерение не обязательно должно иметь связанный компонент.

Однако необычно, когда требуется изменить намерение, которое уже было настроено для какой-либо другой задачи. Я не могу придумать причину, по которой вы сделали бы это вместо создания нового намерения.

Комментарии:

1. Извините, но установка для компонента значения null не решает проблему, но пустой intent с теми же параметрами работает нормально. Но мне очень интересно, почему intent от получателя невозможно очистить. Является ли это проблемой фреймворка, о которой я должен немедленно сообщить в Google?

2. Я не знаю, какую проблему вы видели, поэтому не знаю, была ли это ошибка. Кажется маловероятным, что что-то столь тривиальное, как установка null, не будет работать и будет оставаться ошибкой в течение 10 лет, и никто этого не заметит.

3. Даже без обнуления компонента все работает нормально, если вы обнулите пакет, используя intent.setPackage(null). Итак, мой вопрос был решен.

4. Это намерение, которое вы получили при создании вашего действия? Это объясняет, почему компонент уже разрешен для пакета, поэтому, если это так, это не ошибка. Я не думаю, что намерения предназначены для изменения и повторного использования.

5. Нет, он приходит ко мне в activity от широковещательного приемника. Я понял, что это не ошибка.