Почему getCallingActivity всегда возвращает ноль? - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть экран приветствия, который можно запустить как первое действие в моем приложении, или он может быть запущен основным действием, в котором пользователь проводит свое время. Я хочу, чтобы он действовал немного иначе, когда он запускался из дома.Экран (или любое другое приложение) или основное действие.

Вызов getCallingActivity() в onCreate, кажется, всегда возвращает ноль, независимо от того, что называется действием.Это странно, потому что это сработало раньше, и именно так я узнал, в каком формате возвращается строка (в любом случае это должно быть в документации).Я не вижу, что могло повлиять на это, потому что единственное, что происходит перед вызовом getCallingActivity(), - это super.onCreate(savedInstanceState).Я звоню в игру с startActivityForResult(welcomeIntent, RESULT_WELCOME).

Что я делаю не так?Есть ли альтернативный способ получить эту информацию?

Ответы [ 6 ]

7 голосов
/ 18 июля 2014

Это известная проблема: getCallingActivity () возвращает фактические данные только в том случае, если действие было начато в той же задаче (см. Учебное пособие «Задачи и стек обратно»).То же самое касается запуска действий для результата правильно (они не могут быть единичными, и вы не можете использовать "FLAG_ACTIVITY_NEW_TASK").

3 голосов
/ 24 июля 2015

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

Кажется, что getCallingActivity () возвращает результаты непоследовательно на разных платформах Android.

Проблема, вероятно, вызвана тем, что вы устанавливаете Режим запуска вашей активности как singleInstance или singleTask .Если установить значение singleTop или оставить его как стандарт , то вам следует решить вашу проблему.Конечно, изменение режима не должно влиять на ваш вариант использования, так что это на ваше усмотрение.

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

Обратите внимание, что установка singleInstance или singleTask возвращает не ноль результаты на Lollipop выпуск.

3 голосов
/ 28 ноября 2011

Передайте дополнительно в Intent, используемом с startActivityForResult(), указывая, какой режим вы хотите.Прочтите это дополнительно через getIntent().getXXXExtra() (XXX зависит от того, какой тип данных вы выберете) в onCreate() недавно запущенного действия.

0 голосов
/ 19 июня 2018

getCallingActivity может возвращать null в зависимости от режима запуска активности, как указали другие. Я запускал действие, вызывая startActivityForResult, передавая намерение, возвращаемое getLaunchIntentForPackage(). По умолчанию у него установлен флаг FLAG_ACTIVITY_NEW_TASK, и это заставило getCallingActivity вернуть null. Звонок intent.setFlags(0) решил проблему для меня.

0 голосов
/ 20 мая 2014

Я столкнулся с этой проблемой, когда активность была объявлена ​​с singleInstance как режим запуска в манифесте.В моем случае я нашел решение без этой декларации, которое решило проблему.

0 голосов
/ 14 сентября 2013

возможно, ваша деятельность по вызову заканчивается раньше, чем вы ожидаете.это случилось со мной и привело к нулевому возврату из getCallingActivity, хотя вызывающая активность использовала startActivityForResult

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