Почему Intent.getAction() моей поисковой активности имеет значение null?
Я следил за документацией SearchManager, но все еще испытываю проблемы с поиском одного из действий моего приложения. Из моей активности появляется диалоговое окно "Поиск", я ввожу запрос, нажимаю "Поиск", моя деятельность снова открывается, и я вижу это в журнале:
D/SearchDialog( 584): launching Intent { act=android.intent.action.SEARCH flg=0x10000000 cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) }
I/SearchDialog( 584): Starting (as ourselves) #Intent;action=android.intent.action.SEARCH;launchFlags=0x10000000;component=com.clinkybot.geodroid2/.views.Waypoints;S.user_query=sdaf;S.query=sdaf;end
I/ActivityManager( 584): Starting activity: Intent { act=android.intent.action.SEARCH flg=0x10000000 cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) }
D/WAYPOINTS( 1018): NI Intent { cmp=com.clinkybot.geodroid2/.views.Waypoints (has extras) }
D/WAYPOINTS( 1018): NI null
D/WAYPOINTS( 1018): NI false
Мне кажется, что все хорошо до последних трех строк. Линии "NI" getIntent().toString(), getIntent().getAction()
, а также getIntent().hasExtra(SearchManager.QUERY)
соответственно.
ActivityManager, похоже, начинает мою деятельность с правильного действия. Тогда, когда моя деятельность начинается, она не содержит никаких действий!? Что я делаю неправильно?
Соответствующая часть моего манифеста:
<activity android:name=".views.Waypoints" android:label="Waypoints" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
1 ответ
Это заняло слишком много часов в моей жизни. При выполнении поиска по поисковой активности singleTop (в моем случае Waypoints) вы должны переопределить onNewIntent() и захватить там поисковый запрос. Что через несколько часов я делал. Уловка была в том, что getIntent() не возвращает Intent, используемый для вызова действия (голова взрывается). Кажется, он возвращает первоначальное намерение, открывшее мою поисковую активность до того, как я выполнил свой первый поиск.
Метод onNewIntent получает цель поиска. Я заменил getIntent() на параметр из onNewIntent() и boom, progress.
Хотя я должен признать; Понимание этого облегчает разочарование от неспособности избежать звука Танцев со звездами, вспыхивающими на заднем плане.